간단한 에코 서버가 있는데 연결된 사용자가 서버에 아무 것도 입력하지 않으면 모든 다른 클라이언트와 해당 클라이언트가 메시지 "+ MOD"를 받겠습니다.Java TCP Echo 서버 - 브로드 캐스트
지금 모든 클라이언트에게 보내지는 않겠지 만 내 코드에서 무엇이 잘못되었는지 모르기 때문에 메시지를 보낸 클라이언트에게 메시지 "+ MOD"를 보냅니다. 모든 다른 사람들도 그렇게해야합니다.
나는 그것을 얻지 못한다. 나는 모든 클라이언트를 통과하는 루프를 가지고 있지만 여전히 모든 것을 전송하지는 않는다.
SERVER :
package com.murplyx.server;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server {
public static ServerSocket server;
public static ArrayList<Socket> clients = new ArrayList<Socket>();
public static void broadcast(String message) {
try {
for (Socket socket : clients) {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(message);
}
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
try {
server = new ServerSocket(9000);
while (true) {
clients.add(server.accept());
for (Socket socket : clients) {
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = in.readLine();
if (line != null) {
broadcast(line + " | MOD");
}
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
}
CLIENT :
package com.murplyx.client;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String args[]) {
try {
while (true) {
Socket socket = new Socket("localhost", 9000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
out.println(input.readLine());
System.out.println(in.readLine());
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
이 도와주세요.
고맙습니다.
(이 코드는 내가 첨부 된 링크의 코드 (또한 귀하의 질문에)와 함께 간다, 서버의 while 루프 전에 넣어)()', 당신은'out.close()'를 사용하여 반복 할 때마다'PrintWriter'를 닫아야합니다. – colti
제대로 기억한다면 PrintWriter를 닫으면 기본 소켓이 닫힙니다. 한 번 이상 방송해야한다면 닫지 않을 것입니다. – Aify