日期:2014-05-20  浏览次数:20758 次

如何通过socket实现双方通信
我写了一个C/S程序,客户端连接到服务器上,然后双方实现通信,但是为什么当客户端发送数据到服务器端后,客户端在等待服务器端发来的信息的时候总是提示socket已经关闭,我的客户端代码是:

client   =   new   java.net.Socket( "127.0.0.1 ",1234);
java.io.OutputStream   output   =   client.getOutputStream();
java.io.InputStream   input   =   client.getInputStream();
java.io.BufferedWriter   writer   =  
                  new   java.io.BufferedWriter( new   java.io.OutputStreamWriter(output));
writer.write( "eiieei ");
writer.flush();
writer.close();

java.io.BufferedReader   reader   =   new   java.io.BufferedReader(
new   java.io.InputStreamReader(input));

String   line   =   reader.readLine();   //这句话提示socket已经关闭

我跟踪代码查一下了发现当执行writer.clase()后,socket就已经关闭了,但是如果不写这句话服务器端无法得到客户端发来的最后一个字符。
该如何解决?
谢谢


------解决方案--------------------
BufferedReader读数据的时候,似乎有的问题,采用下面的方式
import java.io.*;
import java.net.*;

public class MyServer {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(5678);
Socket client=server.accept();
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
while(true){
String str=in.readLine();
System.out.println(str);
out.println( "has receive.... ");
out.flush();
if(str.equals( "end "))
break;
}
client.close();
}
}