当前位置: 首页 > 知识库问答 >
问题:

一个java套接字可以进行多次背靠背写操作,而不会使接收套接字崩溃吗?

卫俊力
2023-03-14

我对socket编程很陌生。我注意到,BufferedReader。readln()阻塞,直到有东西要从另一端读取,但是PrintWriter。println()像忍者之星一样抛出数据。

我在网上看到的大多数套接字示例都是简单的读写程序。

如果我的程序有服务器调用println()多次背靠背发送不同的字符串,而客户端套接字需要读取每一行并在每次读取之间处理字符串,服务器是否有可能用数据压倒客户端?有些数据最终会丢失吗?

是否必须在我的程序中设置一种“响应”逻辑,即服务器发送数据并等待客户端的“继续”后才能继续?

根据所使用的InputStream/OutputStream实现(如数据或对象输入/输出流),这是否也有所不同?

我不知道这是否会产生影响,但这些是我在Android应用程序中运行的程序。

共有2个答案

爱琪
2023-03-14

否。如果发送方超过接收方,它将在阻塞模式下阻塞,或在非阻塞模式下获得零长度写入。这种情况发生在TCP中,而不是Java中。

萧伟兆
2023-03-14

这一切都由TCP规范为您提供。解释起来真的很复杂,但是TCP中有处理发送和接收窗口大小、指数退避和恢复、接收数据确认等的算法。除非你正在处理像实时视频流这样的延迟问题,否则你不需要担心。

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

  • 我只是想在我的OSX上运行nginx上的php。 我的php-fpm.conf文件 我的www.conf文件 在我的nginx.conf文件我得到了这个: 每次我打我的服务器我得到这个错误: 2017/12/31 01:45:25[crit]1102#0:*2 connect()到unix:/var/run/php fpm。连接到上游时sock失败(38:非套接字上的套接字操作),客户端:::1,

  • 问题内容: 我正在建立一个客户-服务器项目。 我需要的是客户端发送一个字符串,例如“ Pendu”,服务器接收该字符串并将一个名为“ Pendu”的对象发送回客户端。 这是我的代码: 该类在包中定义: 我的问题是: 首先,我执行服务器,然后看到控制台中显示的内容。 然后我执行客户端,在控制台中,我收到如下消息: 同时,服务器端未显示任何新内容。 现在,我停止客户端,并显示服务器的所有其他消息: 当

  • 我有几个关于Java套接字编程的问题。 > 我有一个进程需要跨多个套接字连接发送一条消息。现在我有如下内容 这是原子能的吗?或者,在并发环境中,它们是否有可能在几乎相同的时间发送? 在并发环境中,套接字连接(设置为PrintWriter)的输出流是否已经互斥?比如说,两个线程想要同时写入PrintWriter。如果没有在PrintWriter上显式互斥,流的任何输出都会被弄乱吗?

  • 我计划做一个项目,其中包括一个作为visual studio控制台应用程序的服务器和一个作为qt应用程序的客户端应用程序,我想知道是否有可能在这两个应用程序之间发送和接收数据,如果是的话,我还想知道它是否也能在android上工作,在windows作为windows服务器端和android作为客户端之间工作 注意:服务器将使用winsock,客户端将使用qt套接字,两个应用程序将使用tcp套接字

  • 线程“main”java.net.ConnectException:连接超时:在java.net.dualStackplainsockeTimpl.Connect0(本机方法)在java.net.dualStackplainsockeTimpl.socketConnect(DualStackplainsockeTimpl.java:69)在java.net.abstractplainsockeTi