繁体   English   中英

从ServerSocket Java进行套接字验证

[英]Socket verification from ServerSocket Java

我正在尝试创建“多客户端-单服务器”连接。 我的客户端打开了连接,并在服务器端创建了

     Client clt = new Client("127.0.0.1", 9000);
        clt.openConn();

...

public Client(String serverAddress, int serverPort) {
    this.serverAddress = serverAddress;
    this.serverPort = serverPort;
}
try {
        this.clientSocket = new Socket(this.serverAddress, this.serverPort);
        this.clientSocket.setKeepAlive(true);
        this.clientSocket.setSoTimeout(0);

            oos = new DataOutputStream(this.clientSocket.getOutputStream());
            ois = new DataInputStream(this.clientSocket.getInputStream());...}

...

在服务器端,我创建了ServerSocket的ListArray,并将它们包装在线程上。

    ServerSocket serverSocket = null ;
        Socket clientSocket;
        boolean listening = true;
        ArrayList threadList = new ArrayList();
        Iterator itSrvThr;
    try {
            serverSocket = new ServerSocket(port);

        } catch (IOException e) {
            System.err.println("Could not listen on port: " + port + ".");
            System.exit(-1);
        }
        while (listening) {
            clientSocket = serverSocket.accept();
            ServerThread srvThread = new ServerThread(clientSocket);
            srvThread.start();
`...`
    }

哪里

 ServerThread extends Thread
    {...
         public void run() {
           this.ois = new DataInputStream(socket.getInputStream());
           this.oos = new DataOutputStream(socket.getOutputStream());    
         }
    }

我的程序发送和接收对象(我称它们为“ Datagramm”),这些对象是文件和字符串的某种包装(让我们说这是客户端服务器的某种语言)

现在关于我遇到的问题。 每当需要从服务器端测试“活动”套接字时,我都必须进行验证...我正试图在此刻在ArrayList中出现新元素时进行此验证,但它给我带来了“ Datagramm”发送问题

itSrvThr = threadList.iterator();
            while (itSrvThr.hasNext()) {
                ServerThread st = (ServerThread) itSrvThr.next();
                boolean stoppedSocket = st.getStopped();

                if (stoppedSocket) {
                    st.stop();
                    itSrvThr.remove();
                }else {??? resolution???}

stopSocket-此值表示从客户端站点以编程方式关闭了套接字。

老实说,我只使用套接字和线程几个星期,这就是为什么每个帮助和批评家都可以接受的原因。 ...感谢您的回答,但我在心跳编码方面遇到了问题。 首先,必须将准确的心跳位置放置在服务器端。

我建议您每隔一段时间(几秒钟)都没有发送消息时,从客户端和/或服务器发送心跳消息,而另一端可能会在您多次未收到任何消息时超时。

如果您有{message length} {message}之类的协议,我将message-length = 0用作心跳。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM