1
私はちょっとしたチャットのプロンプトを出そうとしていますが、実際には計画通りには機能していません。文字列のリストをループしないためには?
new Thread(new Runnable(){
@Override
public void run(){
while (true){
for (Socket s : s){
for (String str : receive(s)){
System.out.println("processing "+str);
if (str.startsWith("#reg")){
str = str.replaceAll("#reg", "");
registered.put(s.getInetAddress().toString(), str);
System.out.println("SERVER >> user "+str+" on "+s.getLocalAddress().toString()+" registered!");
send(s, "#confirmed");
}else{
sendToAll(registered.get(s.getLocalAddress().toString())+" >> "+str);
}
}
}
}
}
}).start();
ここで、受信したすべてのメッセージをチェックしています。彼らはこの方法で受け取っています。
public List<String> receive(Socket s){
try{
List<String> lines = new ArrayList<String>();
InputStream is = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
lines.add(line);
System.out.println("SRECEIVE >> "+line);
}
return lines;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
「SRECEIVE >> msg」というメッセージが表示されていますが、コンソールにポップアップ表示されています。 スレッド(第1コード)のSystem.out.println("processing "+str);
行がポップアップしていません。 変数 "s"は(接続された)ソケットの配列です。 「受信(ソケット)」が呼び出される唯一の時間はそのスレッドです^^。
InputStreamとBufferedReaderを読み終えたら、閉じることをお勧めします –