TCP 数据包进入服务器,但不进入监听程序

Posted

技术标签:

【中文标题】TCP 数据包进入服务器,但不进入监听程序【英文标题】:TCP packet comes in to the server, but not to the listening program 【发布时间】:2015-03-20 01:57:54 【问题描述】:

所以我有一个 android 应用程序和一个套接字服务器。从客户端发送第一个数据包时,通信似乎很好。我得到了很好的回应。

但是,从第二次开始,当我发送一个数据包时,什么都没有发生。没有Logcat 也没有服务器中的任何内容。我尝试打印进入服务器的所有内容。

所以我尝试用Wireshark 捕获数据包。我在第二个数据包上看到了这种情况。

数据包似乎进来了,但我在服务器程序运行中没有得到任何东西。

我尝试在一个应用程序像上面那样卡住之后运行另一个应用程序,第二个应用程序第一次得到很好的响应,然后是同样的事情。

所以我猜服务器程序没有卡在任何地方或什么地方。

这是我的代码的监听部分。

serverSocket = new ServerSocket(port);
while (true)  // socket
    Socket clientSocket = serverSocket.accept();

    out = new DataOutputStream(clientSocket.getOutputStream());
    in = new DataInputStream(clientSocket.getInputStream());

    byte[] read = new byte[512];
    int readcount = in.read(read);
    System.out.println(bytesToHex(read)); // doesn't print from the second one

    if (readcount != -1) 
        if (read[0] == something) 
            HandleMsg doIt = new HandleMsg(connection, out, Arrays.copyOfRange(read, 1, readcount));
            doIt.start();
        
        else 
            System.out.println("Got Something Unknown!");
            System.out.println(bytesToHex(Arrays.copyOfRange(read, 0, readcount)));
        
    

connection 是一个数据库连接。

另外,当我重新启动应用程序或连接时,它第一次运行良好,然后再次卡住。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您只对每个接受的套接字进行一次读取,因此来自同一来源的第二个数据包当然不会被打印。你必须循环。

【讨论】:

哇。我只是觉得很愚蠢。非常感谢。哈哈

以上是关于TCP 数据包进入服务器,但不进入监听程序的主要内容,如果未能解决你的问题,请参考以下文章

TCP的三次握手四次分手,DDOS

TCP / IP 基本知识

TCP三次握手和四次挥手

TCP三次握手及原因

swoole 创建tcp服务器

TCP的三次握手,四次挥手