先代码如下:
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通。
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通。
很有可能是println readLine造成的
系统不一样,换行符也不一样,如果系统不能正确读取到换行符,就一直堵塞
可以尝试启动的时候,带上属性设置参数
如
java -Dline.separator=xxx your_java
系统不一样,换行符也不一样,如果系统不能正确读取到换行符,就一直堵塞
可以尝试启动的
LINUX换行是\n,十六进制数值是:0A
centos 是LINUX的吧
但客户端又提示连接上了,这个不明白。
或者你两边都设置同一个字符串,或者你在启动时候,认为用代码设置
System.getProperties().setProperty("line.separator", "\n");
都加到程序启动,还是没用。
PrintWriter streamWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socketToHandle.getOutputStream())), true); BufferedReader streamReader = new BufferedReader(new InputStreamReader(socketToHandle.getInputStream()));
String fileToRead = streamReader.readLine();
System.out.println("client request message :"+fileToRead);
// BufferedReader fileReader = new BufferedReader(new FileReader(fileToRead));
String line ="server is ok,this is return message ";
// while((line=fileReader.readLine())!=null)
// {
//System.out.println("line="+line);
streamWriter.println(line);
// }
// fileReader.close();
streamWriter.close();
streamReader.close();
System.out.println(" ok");这是服务器上的代码。高人看看有什么不对的地方。
虚拟机也有虚拟网卡的,所以应该是配置的问题
另,上面的代码大概看了一眼,
streamWriter.close();
streamReader.close();
最好不要close,这个close会导致整个socket的close,具体可以参考javadoc的文档说明,可以让客户端在整个交互结束后退出时关闭socket就可以了。
tcp 0 0 10.1.14.71:25888 10.1.14.90:2003 SYN_RECV
证明客户端的连接请求已经到服务器了。为何没返回呢。
http://www.jdzj.com/DATUM/showart.asp?art_id=5961
LINUX不熟悉啊,