Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java未侦听套接字消息_Java_Sockets - Fatal编程技术网

Java未侦听套接字消息

Java未侦听套接字消息,java,sockets,Java,Sockets,我这里有一个简单的问题(我想?),但在四处搜索后找不到解决方案。下面是我的客户机代码,这段代码的问题是,在我向服务器发送用户名后,它没有从服务器收到任何消息(虽然服务器确实发送了一条消息),我无法通过while循环真正跟踪我的应用程序流,有人能向我解释一下我在这方面出了什么问题吗 快乐流: C:连接 S:你好 C:HELO用户名 S:+OK用户名 广播信息 C:BCST消息 S:+好的 } 我的问题是这个代码 while((cmdLine = cmd.nextLine()) != null){

我这里有一个简单的问题(我想?),但在四处搜索后找不到解决方案。下面是我的客户机代码,这段代码的问题是,在我向服务器发送用户名后,它没有从服务器收到任何消息(虽然服务器确实发送了一条消息),我无法通过while循环真正跟踪我的应用程序流,有人能向我解释一下我在这方面出了什么问题吗

快乐流: C:连接 S:你好 C:HELO用户名 S:+OK用户名

广播信息 C:BCST消息 S:+好的

}

我的问题是这个代码

while((cmdLine = cmd.nextLine()) != null){
        out.println("BCST " + cmdLine);
    }
这段代码应该在哪里,因为在我输入用户名后,它不会检查我是否在控制台中输入了什么

控制台日志:
已连接:Socket[addr=localhost/127.0.0.1,port=1337,localport=52469]服务器:HELO Welkom到WhatsUpp! 用户名中的Voer een用户名 myUsername<已发送到服务器 verstuurd naar是服务器吗 服务器:+OK用户名(来自服务器的确认) 要广播的消息(然后我键入要发送到服务器的消息)

要广播的消息应该发送到服务器,但它不执行任何操作,因此它不会进入cmdLine的while循环
非常感谢任何提示/建议

安装并观看客户端和服务器发送的消息。您的in.readline()希望在服务器消息的结尾有一个\n。如果\n丢失,readline()将永远挂起。如果您不控制服务器代码,请考虑读取所接收的字节并记录它们以避免使用WiRESHARK。

<代码>代码行>代码>是阻塞的,并且永远不会返回<代码> null < /C> >,因此您有无限的循环读取数据以供发送,而YO实际上从不读取您所返回的内容。
我的建议是在单独的线程上读写或使用非阻塞io。

您应该尝试调试您的程序。最可能发生的情况是,在您阅读了第一条消息后,它会被困在等待来自服务器的另一条消息。但仅从您的问题还不完全清楚,您还应该将您现有的日志附加到问题中。已连接:Socket[addr=localhost/127.0.0.1,port=1337,localport=52469]服务器:HELO Welkom到WhatsUpp!用户名username中的Voer een username是verstuurd naar de server:+确定用户名要广播的消息要广播的消息应该发送到服务器,但是它不做任何操作,因此它不会进入cmdline的while循环请将所有相关信息添加到问题体,评论不是发布此类信息的好地方。我的不好,只是更新了问题正文。在阅读之前,您可以检查是否有
available()
可以阅读。是否有比.readline()中更好的命令,它不需要expect a\n?我认为这是一个问题,因为它确实悬而未决。我会安装wireshark只要我回家检查这个out@RohminMirzauser902383建议在单独的线程上使用read()和write()。这使得客户机有点复杂。你可以在网络上搜索socket客户端的例子,我记得已经足够了。
while((cmdLine = cmd.nextLine()) != null){
        out.println("BCST " + cmdLine);
    }