当前位置: 首页 > 面试题库 >

从Java套接字读取数据

邓威
2023-03-14
问题内容

我有一个侦听某些x端口的套接字。

我可以从客户端应用程序将数据发送到套接字,但是无法从服务器套接字获得任何响应。

  BufferedReader bis = new BufferedReader(new 
  InputStreamReader(clientSocket.getInputStream()));
  String inputLine;
  while ((inputLine = bis.readLine()) != null)
  {
      instr.append(inputLine);    
  }

..此代码部分从服务器读取数据。

但是,直到关闭服务器上的套接字,我才能从服务器读取任何内容。服务器代码不受我控制,无法对其进行编辑。

如何从客户端代码中克服这个问题。

谢谢


问题答案:

为了在客户端和服务器之间进行通信,必须明确定义协议。

客户端代码将阻塞,直到从服务器收到一行或关闭套接字为止。您说过只有在关闭插座后才能收到东西。因此,这可能意味着服务器不会发送以EOL字符结尾的文本行。readLine()因此,该方法将阻塞,直到在流中找到此类字符或关闭套接字为止。如果服务器不发送行,请不要使用readLine()。使用适合定义的协议的方法(我们不知道)。



 类似资料:
  • 我正在创建一个简单的服务器/客户端UDP套接字程序,我遇到了一个问题。 问题是recvfrom()函数一直在重新读取上次发送的数据。 因此,如果我从客户端向服务器发送两个数据包,那么recvfrom()将读取第一个数据包并打印其数据,然后它将不断地反复读取第二个数据包。 据我所知,一旦成功执行读取操作,数据包应该从套接字中删除,但这似乎没有发生。 我知道客户端没有重新发送数据,因为每当客户端发送数

  • socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!

  • 问题内容: 我有一个线程可以从缓冲读取器读取字符(该读取器是从套接字创建的,如下所示): 此代码只能运行一次。例如,如果客户端连接并发送此消息:“这是一个测试”和“这是另一个测试”,则主机输出为: 请注意该程序不会收到“这是另一个测试”,因为它停留在读取流上。有什么办法在不减小缓冲区大小的情况下解决这个问题?这是线程的代码: 客户/发送者的代码(不是我的代码): 问题答案: 是一个 阻塞 调用,这

  • 我有两个通过字符串与套接字通信的Java项目。一个是客户端,另一个是服务器。服务器通过“ServerSocket”接受连接,并使用新创建的“套接字”创建新的“会话”(线程)。 同时,客户端只有一个“套接字”,一旦连接了这个套接字,客户端就会创建一个“ClientSession”(线程,非常类似于“session”)。 我想要的是服务器通过“username”字符串询问客户机他的用户名,客户机用他的

  • 问题内容: 我试图呼吁一个非常繁重的过程。平均工作时间估计为9-10分钟。 当我执行该过程时,我为一个巨大的数字设置了超时时间:99999999。 2分钟后,出现以下错误: java.net.SocketTimeoutException:读取超时 我尝试对其进行更多处理,并将超时设置为3000,并且在预期的3秒钟后出现了相同的错误。 您对为什么将其设置为最大120000 有任何想法吗? 问题答案:

  • 问题内容: 我目前正在尝试使用boost-asio的套接字API通过网络将一些JSON数据从客户端传输到服务器。我的客户基本上是这样做的: 在服务器端,我可以选择各种功能。我想使用JsonCpp解析接收到的数据。在研究JsonCpp API(http://jsoncpp.sourceforge.net/class_json_1_1_reader.html)时,我发现Reader可以在char数组或