首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java.net.SocketException: Connection reset //这句是等了好长时间才出来。

2011-11-10 
关于虚拟机与XP主机SOCKET通信的奇怪问题先代码如下:server:try{int i1ServerSocket server new Serve

关于虚拟机与XP主机SOCKET通信的奇怪问题
先代码如下:
server:
 try 
  {
  int i=1;
  ServerSocket server = new ServerSocket(listenPort);
  Socket incomingConnection = null;
  System.out.println("server is ok,wait client request. port="+listenPort);
  while(true)
  {
  System.out.println("wait... ");
  incomingConnection = server.accept(); 
  System.out.println("client request "+i);
  i++;
  handleConnection(incomingConnection);
  }
  }  
...........................

////////////////////////////////////////////////////////////////////////////////////////
client

  System.out.println("begin connection...hostIp="+hostIp+":hostport="+hostPort);
  Socket client = new Socket(hostIp,hostPort);
  // System.out.println("client.isConnected()=" + client.isConnected());
  System.out.println("begin connection......");
  socketReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
  socketWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true); 
  System.out.println("connetc is ok");

////////////////////////////////////////////////////////////////

  System.out.println("send message begin");
  socketWriter.println(fileNameToGet);  
  System.out.println("send message end");
  socketWriter.flush();
  System.out.println("send message flush");
  String line = null;
  System.out.println(socketReader.readLine());
  while((line=socketReader.readLine())!=null)
  System.out.println("line="+line);
  fileLines.append(line+"\n");

////////////////////////////////////////////////////////////////////////

具体情况是:上面代码同时在xp或虚拟机(centos5.5)运行,一切正常。但现在把server代码在虚拟机centos运行,client在XP上运行,显示如下:server:
server is ok,wait client request. port=25888
wait... 

client :
begin connection...hostIp=10.1.14.71:hostport=25888
client.isConnected()=true
begin connection......
connetc is ok
send message begin
send message end
send message flush
java.net.SocketException: Connection reset //这句是等了好长时间才出来。

为何client提示连接上了,server没反应?防火墙关了,而且xp能够与虚拟机互相ping通。






[解决办法]
这可真的不了解,你可能要改变虚拟机的连接方式才行。
[解决办法]
handleConnection

去调试吧,看看是如何返回数据的。
[解决办法]
估计虚拟机运行client,xp运行server也会堵塞
很有可能是println readLine造成的
系统不一样,换行符也不一样,如果系统不能正确读取到换行符,就一直堵塞
可以尝试启动的时候,带上属性设置参数

java -Dline.separator=xxx your_java
[解决办法]
可能是println readLine造成的
系统不一样,换行符也不一样,如果系统不能正确读取到换行符,就一直堵塞
可以尝试启动的
[解决办法]
windows换行是\r\n,十六进制数值是:0D0A。
LINUX换行是\n,十六进制数值是:0A
centos 是LINUX的吧
[解决办法]


这样不行的,这样是\n字符串
或者你两边都设置同一个字符串,或者你在启动时候,认为用代码设置
System.getProperties().setProperty("line.separator", "\n");

[解决办法]
如果是没连上,修改一下虚拟机和xp的网卡使用模式
[解决办法]
查看一下虚拟机和xp的共享网卡的设置
[解决办法]
如果System.out.println("client request "+i);都没打印的话,就是服务器没收到任何连接请求
虚拟机也有虚拟网卡的,所以应该是配置的问题
另,上面的代码大概看了一眼,
streamWriter.close();
streamReader.close();
最好不要close,这个close会导致整个socket的close,具体可以参考javadoc的文档说明,可以让客户端在整个交互结束后退出时关闭socket就可以了。

热点排行