当前位置: 代码迷 >> J2EE >> socket有关问题求高手
  详细解决方案

socket有关问题求高手

热度:101   发布时间:2016-04-22 01:24:24.0
socket问题求高手
我现在创建了一个服务端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;            }        }    }}
  相关解决方案