androidとネットワーク(中)socketの罠


Ajaxのように、ユーザーが出力するとサーバーで出力の結果を返す必要がある場合があります.例えば、ユーザーが123を出力し、コンソールの上に123を出力し、ユーザーが234を出力します.コンソールの上に234があります.もちろん、コードは困惑しません.
public class MyServer {   
public static void main(String[] args) throws IOException{   
ServerSocket server=new ServerSocket(6666);   
Socket client=server.accept();   
BufferedReader in=  
new BufferedReader(new InputStreamReader(client.getInputStream()));   
while(true){   
String str=in.readLine();   
System.out.println(str);   
if(str.equals("end"))   
break;   
}   
client.close();   
}   
}
public class ClientSocket{   
static Socket server;  
public static void main(String[] args)throws Exception{   
server=new Socket(InetAddress.getLocalHost(),6666);   
PrintWriter out=new PrintWriter(server.getOutputStream());   
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));   
  
while(true){   
String str=wt.readLine();   
out.println(str);   
//          
out.flush();   
if(str.equals("end")){   
break;   
}   
}   
server.close();   
}   
}   

はい、運転を開始し、123を入力します.コンソールはすぐに123に戻り、456を入力し続けます.コンソールは反応していません.これ以上負けても、反応しない.コードに間違いがあるのではないかと疑う学生もいます.whileサイクルでSystemだと思っています.out.println(str)という言葉は実行されず、頭が大きくなりました.実はこのコードは完全に間違っていません.なぜなら、実際に2つのプログラムを実行したからです.2回目の実行時にeclipseのコンソールはサービス側に渡されたので、コンソールでの操作は実際にサービス側の操作であり、もちろん役に立たないからです.
機能する場合は、コードは次のように書きます.
public class MyServer {   
public static void main(String[] args) throws IOException{   
ServerSocket server=new ServerSocket(6666);   
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();   
}   
}

public class ClientSocket{   
static Socket server;   
public static void main(String[] args)throws Exception{   
server=new Socket(InetAddress.getLocalHost(),6666);   
BufferedReader in=  new BufferedReader(new InputStreamReader(server.getInputStream()));   
PrintWriter out=new PrintWriter(server.getOutputStream());   
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));   
  
while(true){   
String str=wt.readLine();   
out.println(str);   
out.flush();   
if(str.equals("end")){   
break;   
}   
System.out.println(in.readLine());   
}   
server.close();   
}   
} 

この結果、コンソールはクライアントの手に渡っており、サーバはクライアントのコンソールにデータを返します.文字を入力するとすぐに表示されます.endを入力すると、クライアントが切断され、サーバ側がコンソールを取得するので、「すべてのデータが一緒に表示されている」ことがわかります.