クライアント:
String val=req.getParameter("text").toString();
String id=req.getParameter("id");
Socket socket =null;
if(id==null||id.equals("")){
socket= new Socket("127.0.0.1",8090);
id=socketFactory.getNewId()+"";
socketFactory.add(Integer.parseInt(id), socket);
}else{
socket=socketFactory.get(Integer.parseInt(id));
}
OutputStream os=socket.getOutputStream();
//向页面传递
PrintWriter write=new PrintWriter(resp.getOutputStream());
write.write(id);
//向服务端传递
PrintWriter swrite=new PrintWriter(os);
swrite.println("i am client"+id+":"+val);
write.close();
// swrite.close();
// os.close();
// os.flush();
swrite.flush();
// write.flush();
サーバー:
ServerSocket serversocket=new ServerSocket(8090);
for(int i=0;i<10;i++){
Socket socket=serversocket.accept();
System.out.println("获取到请求");
BufferedReader bread=new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuilder msg=new StringBuilder();
String str=null;
while((str=bread.readLine())!=null&&str.length()>0){
msg.append(str);
}
System.out.print(msg);
PrintWriter write= new PrintWriter(socket.getOutputStream());
write.write("您好 我是服务端"); //服务端回应
write.flush();
}
私たちは互いに通信サーバとクライアントを達成するために、ソケットの接続状態を維持しながら、達成したい、とサービスは、データを読み込むためのソケットを受信したときに、ことがわかったので、データを照会することにより、背面にreadlineのを阻止するの状況はreadlineので見つかったことがわかりました終了信号を受信した後、クライアントは、(近い呼び出しことを意味し、データの読み出しを停止する)またはshutdownOutputう(のみ)と、現在のreadline()が停止することができます。ソリューション
(whileループなし)1、各受信つのみコールのreadline
図2は、read()メソッドを使用して、ワンタイム増加バフメモリデータから読み出し
次のように図3に示すように、ソケットのスレッドの確立は、サーバーの後にコードを変更します
ServerSocket serversocket=new ServerSocket(8090);
ExecutorService exec=Executors.newCachedThreadPool();
for(int i=0;i<10;i++){
Socket socket=serversocket.accept();
exec.execute(new Runnable() { //启用线程
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("获取到请求");
BufferedReader bread;
try {
bread = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str=null;
while((str=bread.readLine())!=null){
System.out.println(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
PrintWriter write= new PrintWriter(socket.getOutputStream());
write.write("您好 我是服务端"); //服务端回应
write.flush();
}