我正在开发一个使用TCP进行设备连接的Android应用程序。问题是我是套接字编程的新手。我已成功制作了服务器和客户端代码。每个客户端都可以连接到服务器,服务器可以回复客户端。但我似乎无法使服务器同时向所有连接的客户端发送消息。使服务器向客户端广播消息的步骤是什么? 这是服务器代码:
ServerSocket server = null;
try {
server = new ServerSocket(9092); // start listening on the port
} catch (IOException e) {
Log.d("btnCreate onClick", "Could not listen on port: 9092");
}
Socket client = null;
while(true) {
try {
client = server.accept();
} catch (IOException e) {
Log.d("btnCreate onClick", "Accept Failed");
}
//start a new thread to handle this client
Thread t = new Thread(new ClientConn(client));
t.start();
}
服务器线程:
class ClientConn implements Runnable {
private Socket client;
ClientConn(Socket client) {
this.client = client;
}
public void run() {
BufferedReader in = null;
PrintWriter out = null;
try {
/* obtain an input stream to this client ... */
in = new BufferedReader(new InputStreamReader(
client.getInputStream()));
/* ... and an output stream to the same client */
out = new PrintWriter(client.getOutputStream(), true);
} catch (IOException e) {
e.printStackTrace();
return;
}
String msg;
try {
while ((msg = in.readLine()) != null) {
Log.d("ClientConn", "Client says: " + msg);
out.println(msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:4)
TCP是一种点对点连接协议。这意味着当您在套接字上发送消息时,它只会转到一个接收器。其他IP协议(如UDP)确实具有“广播”模式,其中一个数据包可以发送到多个接收器,但TCP没有这样的功能。
要让您的服务器向所有客户端发送相同的消息,服务器必须在每个客户端的每个套接字上发送一条消息。