我现在创建了一个服务端socket 和一个socket客户端
现在每当客户端连接服务端的时候,服务端都向客户端返回信息。
能不能当有5个客户端连接的时候,共同向所有的客户端返回相同的信息呢?
比如:客户端1传给服务端传信息“1”,客户端2传给服务端传信息“3” ......客户端5传给服务端传信息“5”
当服务端接受到5个客户端的信息后,才对接受到的5个值进行对比,判断结果“5”最大,并且返回给5个客户端的信息都是
“5”. 这样应该怎么处理? 现在做的只能返回给第5个客户端。
------解决方案--------------------
每个socket保存到一个map或list里,socket关闭的时候就从map或list里删除
分别遍历map或list里的socket,接收socket数据,比较数据,然后把结果分别发送给每个socket
LZ现在只能发送给第5个socket,估计是每次接收socket的地方,用的是同一个成员,所以前4个都丢失了
------解决方案--------------------
每次客户端向服务端请求的时候,都将其socket保存到list中,服务端向客户端发信息的时候,就遍历list,向每一个客户端 发送信息
------解决方案--------------------
要不就建立长连接
------解决方案--------------------
1楼和3楼解释的很好啊,每连上一个就把 socket存起来,你要返回信息时调用就好了啊
------解决方案--------------------
很粗糙,意思一下
server
- Java code
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class serverS { public static void main(String[] args) throws IOException,InterruptedException { serverS s = new serverS(); s.start(4342); } // 这里存放请求的clientSocket List<ClientThread> clientList = new ArrayList<ClientThread>(); public void start(int port) throws IOException, InterruptedException { ServerSocket server = new ServerSocket(port); while (true) { Socket clientSocket = server.accept(); ClientThread client = new ClientThread(clientSocket); clientList.add(client); client.start(); Thread.sleep(2000); for (ClientThread c : clientList) { c.send(); } } }}/** * 把请求的的socket封装成对像,分别处理 接收 和 发送 * @author GKT * */class ClientThread extends Thread { private InputStream inputStream; private OutputStream outputStream; public ClientThread(Socket client) throws IOException { this.inputStream = client.getInputStream(); this.outputStream = client.getOutputStream(); } /** * 这里向client发消息 * @throws IOException */ public void send() throws IOException { outputStream.write(222); System.out.println("callClient"); } /** * 这时处理client传来的消息,注意保持长链接,client端也要保持 */ public void run() { System.out.println("用户连接"); while (true) { try { if (inputStream.available() > 0) { System.out.println(inputStream.read()); } else { Thread.sleep(3000); } } catch (Exception e) { System.out.println("用户退出"); break; } } }}