java套接字客户端_使用Java从客户端套接字读取数据(Read data from a client socket in Java)...

使用Java从客户端套接字读取数据(Read data from a client socket in Java)

我编写了从客户端套接字发送/接收数据的代码。 发送数据步骤已成功完成,但是当我想从套接字读取数据时, readLine()方法阻止程序,而没有要读取的数据。

这是我的代码:

StringBuffer document = new StringBuffer();

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String line = null;

while ((line = reader.readLine()) != null)

document.append(line + "\n");

reader.close()

感谢所有我可以读取所有收到的数据,但readLine或read(byte [],int,int)方法在没有数据要读取时阻塞程序,而此方法必须在此时返回null / -1。

I have written the code for sending/receiving data from a client socket. The sending data step has been done successfully, but when I want to read the data from a socket, the readLine() method block program while there isn't data to be read.

This is my code:

StringBuffer document = new StringBuffer();

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String line = null;

while ((line = reader.readLine()) != null)

document.append(line + "\n");

reader.close()

thanks all I can read all received data, but readLine or read(byte[], int, int) methods block program when there is no data to read, while this method must return null/-1 in this time.

原文:https://stackoverflow.com/questions/11390847

2020-07-15 21:07

满意答案

那是因为readLine()函数是一个阻塞调用,所以当然它会阻塞。

为了更具建设性,对readLine()类的方法的调用应该在一个单独的线程中,这样阻塞调用不会影响代码的其余部分。 从正在阅读的类中,我建议创建一个纯粹用于控制从套接字读取的线程。

我将传递对创建类的引用,以便如果线程接收信息,父类可以使用它。

That's because the readLine() function is a blocking call, so of course it's going to block.

To be more constructive, calls to methods like readLine() should be in a separate thread so that the blocking call does not affect the rest of your code. From the class which is reading, I would recommend creating a thread purely to control reading from the socket.

I would pass a reference to the creating class so that if the thread receives information, the parent class can use it.

2012-07-11

相关问答

in.readLine()在看到行终止符之前不会返回。 除非PHP中的socket_write隐式添加行终止符,否则您需要自己执行此操作,以便Java端看到您编写了完整的文本行。 in.readLine() won't return until it sees a line terminator. Unless socket_write in PHP implicitly adds a line terminator, you'll need to do so yourself, so that ...

您关闭了套接字然后继续使用它。 try-with-resource语句关闭了套接字; 你开始的两个线程继续使用它。 You closed the socket and then continued to use it. The try-with-resource statement closed the socket; the two threads you started continued to use it.

你正在读行,但你不是在写行。 您需要为每个已发送的消息添加行终止符。 You're reading lines but you aren't writing lines. You need to add a line terminator to each sent message.

您应该使用OutputStream来编写二进制数据,而不是PrintWriter 。 You should be using an OutputStream to write binary data, not a PrintWriter.

尝试在邮件末尾添加\n 。 也不要将'NoDelay`设置为false。 你正在进行异步发送。 Try adding a \n to the end of the message. Also do not set 'NoDelay` to false. You are doing an asynchronous send.

你的脚本运行正常,并且对你正在寻找的东西没有很大的缺陷。 由于从命令行而不是Web浏览器运行脚本时获得了所需的结果,因此我们可以查明问题的原因:HTTP协议 HTTP不是用于持续连接(就像你习惯使用Java套接字一样),但它的简化工作流程基于Request / Elaborate / Response / Forget。 因此,您无法与纯HTML / PHP over HTTP解决方案进行“实时聊天”。 唉,并非所有的希望都失去了! 要实现“实时”通信,您可以使用Ajax,这不是很难习惯。 我说“...

我对客户端和服务器通信方式之间的差异非常好奇。 例如,客户端使用Scanner读取输入,而服务器使用BufferedReader (这是我个人的偏好)。 只是一个建议:保持一致。 现在 - 首先,客户端只发送一条消息,但随后开始在无限循环中无限期地读取。 看到你确切地知道服务器在向它发送“HELO”之后应该如何响应(它应该用一行响应,“DERP”),没有理由在任何类型的循环中从服务器读取。 服务器上存在同样的问题。 由于客户端现在是,它总是只向服务器发送一行(“HELO”)。 因此,服务器应该只期...

我们需要在这里绑定吗? 或者仅仅是因为我们想要引用本地端口? 您不需要绑定客户端SocketChannel。 s.connect(someAddr)

如果返回true,则javadocs表示已建立连接。 这是否意味着我不需要调用finishConnect()? 正确。 从我读到的,这是本地连接,但它没有指定远程连接是否可能立即返回true。 它可以随时返回true,你必须检查。 这是客户端向服务器发送SYN的位置吗? 是。 服务器通过一些serverSocketChannel.accept()获...

那是因为readLine()函数是一个阻塞调用,所以当然它会阻塞。 为了更具建设性,对readLine()类的方法的调用应该在一个单独的线程中,这样阻塞调用不会影响代码的其余部分。 从正在阅读的类中,我建议创建一个纯粹用于控制从套接字读取的线程。 我将传递对创建类的引用,以便如果线程接收信息,父类可以使用它。 That's because the readLine() function is a blocking call, so of course it's going to block. To...

相关文章

用java编写的一个socket服务端,通过一个tcp测试工具测试这个服务端,发现发送数据给服务端,服

...

Spring Data: a new perspective of data operations

...

是从网上找到的聊天程序 有服务器和客户端, 在注册完之后出现 java.io.StreamCorrup

...

Data Week: Becoming a data scientist Data Pointed,

...

java keytool生成的证书是CRT等格式的,这种格式是2进制编码的,而C++用的证书格式是pe

...

清明假期翻以前的笔记发现有一些NoSQL相关的内容,比较零散,是之前读《Big Data Glossa

...

Datanode中包含DataXceiverServer。DataXceiverServer是一个so

...

简介 SolrJ是操作Solr的JAVA客户端,它提供了增加、修改、删除、查询Solr索引的JAV

...

solr 的 data import 导入 mysql数据 (1)、编辑 example/solr/c

...

As you know, I've been playing with Solr lately, tr

...

最新问答

如果启用了复制处理程序,请确保将其置于其中一个安全角色之后。 我见过人们做的另一件事是在不同的端口上运行admin。 最好在需要auth的页面上使用SSL,这样你就不会发送明确的密码,因此管理和复制将发生在8443上,而常规查询将在8080上发生。 如果您要签署自己的证书,请查看此有用的SO页面: 如何在特定连接上使用不同的证书? I didn't know that /admin was the context for SOLR admin because /admin does not re

第一:在您的样本中,您有: 但是你在询问 //td[@class=‘CarMiniProfile-TableHeader’] (注意TableHeader中的大写'T')。 xpath区分大小写。 第二:通过查询// td [@ class ='CarMiniProfile-TableHeader'] / td,你暗示你在外部td中有一个'td'元素,而它们是兄弟姐妹。 有很多方法可以在这里获得制作和模型

这是你的答案: http://jsfiddle.net/gPsdk/40/ .preloader-container { position: absolute; top: 0px; right: 0px; bottom: 0px; left: 0px; background: #FFFFFF; z-index: 5; opacity: 1; -webkit-transition: all 500ms ease-out;

问题是,在启用Outlook库引用的情况下, olMailItem是一个保留常量,我认为当您将Dim olMailItem as Outlook.MailItem ,这不是问题,但是尝试设置变量会导致问题。 以下是完整的解释: 您已将olMailItem声明为对象变量。 在赋值语句的右侧,在将其值设置为对象的实例之前,您将引用此Object 。 这基本上是一个递归错误,因为你有对象试图自己分配自己。 还有另一个潜在的错误,如果之前已经分配了olMailItem ,这个语句会引发另一个错误(可能是

我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话。 当您开始捕获时,数据量似乎过大,但如果您能够发现任何看起来像您的SOAP消息的片段(应该很容易发现),那么您可以通过右键单击并选择来快速过滤到该对话'关注TCP Stream'。 然后,您可以在弹出窗口中查看您编写的SOAP服务与Silverlight客户端之间的整个对话。 如果一切正常,请关闭弹出窗口。 作为一个额外的好处,wireshar

Android默认情况下不提供TextView的合理结果。 您可以使用以下库并实现适当的aligntment。 https://github.com/navabi/JustifiedTextView Android Does not provide Justified aligntment of TextView By default. You can use following library and achieve proper aligntment. https://github.com/

你的代码适合我: class apples { public static void main(String args[]) { System.out.println("Hello World!"); } } 我将它下载到c:\ temp \ apples.java。 以下是我编译和运行的方式: C:\temp>javac -cp . apples.java C:\temp>dir apples Volume in drive C is HP_PAV

12个十六进制数字(带前导0x)表示48位。 那是256 TB的虚拟地址空间。 在AMD64上阅读wiki(我假设你在上面,对吗?)架构http://en.wikipedia.org/wiki/X86-64 12 hex digits (with leading 0x) mean 48 bits. That is 256 TB of virtual address space. Read wiki on AMD64 (I assume that you are on it, right?) ar

这将取决于你想要的。 对象有两种属性:类属性和实例属性。 类属性 类属性对于类的每个实例都是相同的对象。 class MyClass: class_attribute = [] 这里已经为类定义了MyClass.class_attribute ,您可以使用它。 如果您创建MyClass实例,则每个实例都可以访问相同的class_attribute 。 实例属性 instance属性仅在创建实例时可用,并且对于类的每个实例都是唯一的。 您只能在实例上使用它们。 在方法__init__中定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xml动态生成java_从XML文档动态生成Java类

考虑这种情况:我有一个名为person.xml的XML文件,其中包含以下数据.MrFoo28如果我想将这个XML读入Java对象,我将创建一个名为PersonBean的Java bean(使用属性的getter / setter):class Person{String name;int age;}我可以使用任何API来读取XML并填充Java…

java lpad oracle_Oracal的Lpad函数

2007-09-21 17:13 | pinty回复楼上,根据LEVEL的数决定输出“-”的个数,看下面的例子SELECT LEVEL, LPAD( ,2*(LEVEL - 1)) || lname "EMPLOYEE",emp_id, manager_emp_idFROM employeeSTART WITH emp_id 7839CONNECT BY NOCYCLE PRIOR emp_id …

用java输入学生姓名查询成绩_编写一个Java程序,提示用户输入学生数量,学生姓名和他们的成绩,并按照成绩的降序打印学生姓名...

importjava.util.Scanner;publicclassmyclass{publicstaticvoidmain(String[]args){ScannerinputnewScanner(System.in);System.out.print("请输入学生个数,学生姓名以及学生成绩");...import java.util.Scanner;public class myclass{public static void…

java对xml解析_Java中对xml的解析

// 1.通过DocumentBuilderFactor创建解析工厂DocumentBuilderFactory builderFactory DocumentBuilderFactory.newInstance();// 2.通过工厂获得解析器DocumentBuilder builder builderFactory.newDocumentBuilder();// 3.通过parser方法获取DocumentDocument document buil…

刻画小狗状态java_JAVA面向接口编程

JAVA面向接口编程小狗在不同环境条件下可能呈现不同的状态,小狗通过调用 cry()方法体现自己的当前的状 态。要求用接口封装小狗的状态。具体要求如下。• 编写一个接口 DogState,该接口有一个名字为 void showState()的方法。• 编写 Dog 类,…

java jdbc(mysql)驱动源码分析_JAVA JDBC(MySQL)驱动源码分析(二)

本文系转载,地址:http://blog.csdn.net/brilliancezhou/article/details/5425687上一篇中分析了Class.forName(“com.mysql.jdbc.Driver”)幕后所做的事情,也就是在Driver实现类中的静态块和构造函数,本篇主要来分析一下静态块的一…

java %3c%=a%%3e_跪求帮忙解析,急!!!

xml 这个参数的值,是被 urlencode 两次的东西。 php 不懂, Python 的话是用 urllib.unquote 就可以了。>>> s %3C%3Fxmlversion%3D%221.0%22encoding%3D%22gbk%22%3F%3E%253Ctask%253E%253Cuser%253E%253Coper%253Emod%253C%252Foper%253E%253…

java环境变量一闪而过_Java环境变量配置和Tomcat启动时cmd界面一闪而过问题

Java环境变量配置计算机 -> 属性 -> 高级系统设置 -> 环境变量 -> 系统变量中配置Java环境变量。配置JAVA_HOME,属于必配项,如果不配置,直接指定path路径利用工具可以进行Java项目开发,但是后期使用Tomcat开发会出现问…

ubuntu启动php-fpm_ubuntu安装php-fpm+xdebug

一、安装程序包1、sudo apt-get install php5-dev2、sudo apt-get install php5-xdebug二、修改php.ini配置文件; 修改/etc/php5/fpm/php.ini或在增加文件/etc/init.d/php5/conf.d/xdebug.ini; configuration for php Xdebug module;extentionxdebug.so[xdebug]zend_extension/…

php 图片合成,PHP中多张图片合成一张图片例子

今天分享一段PHP中多张图片合成一张图片的代码实现,我们可以在图片合成,水印,九宫格等需求下使用到类似这样的图片合成效果,下面一起来看看例子吧。今天分享一段PHP中多张图片合成一张图片的代码实现,我们可以在图片合成&#xff…

php的cms是什么意思,phpcms是什么

phpcms是一款具备文章、下载、图片、分类信息、影视、商城、采集、财务等众多功能的强大、易用、可扩展的优秀网站管理软件;该软件采用模块化开发,支持多种分类方式,使其可方便实现个性化网站的设计、开发与维护。phpcms是一款具备文章、下载…

php5.4源码下载,WordPress v5.4.2官方正式版源码下载

源码说明WordPress 5.4.2 正式版发布了,此安全和维护版本具有23个修复和增强功能。此外,它还添加了许多安全修复程序-请参阅下面的列表。这些错误会影响WordPress 5.4.1和更早版本。5.4.2版修复了这些问题,因此您需要升级。如果尚未更新到5.4…

前端vue后端java,Vue调用后端java接口的实例代码_亦心_前端开发者

前段时间 做了个学校的春萌项目,其中用到先上后端接口代码:package controller;import net.sf.json.JSONObject;import util.DBUtil;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Http…

边缘检测滤波matlab,卷积滤波器与边缘检测

频率:对于声音,频率实际上是指声波振荡的速度高低频率高频图像是强度变化很大的图像。并且亮度级别从一个像素到下一个像素快速变化。低频图像可以是亮度相对均匀或变化非常慢的图像。这是一个例子中最容易看到的。大多数图像都有高频和低频成分。在上图…

php 读取 stl 文件,科学网—[转载]【源码】读取ASCII STL文件的STLReader - 刘春静的博文...

读取包含顶点和面的ASCII STL文件,并将其构造为矩阵“顶点”、“颜色”和“面”。之后,使用各小模块在Matlab上建立模型。Read ASCII STL file which contains vertexes and faces and structure it to matrixes "vertexes", "colors&quo…

1核1g服务器php,虚拟主机1核1g什么意思

虚拟主机由于用户数量庞大,因此每个虚拟主机需要足够高的配置才能支持这么多网站同时架设、运行,如上面所说的1核,完全没法带动。比如那么我们平常怎么知道自己的虚拟主机配置是怎样的呢?可以直接咨询下面我们来看下西部数码虚拟主…

matlab生成西门子plc源文件,西门子PLC如何把DB快做成源文件

打开db块后在菜单option下面有个customize,弹出的点选项sources那里就可以找到生成源文件的按钮。还原---源文件是保存在sources下面,你可以打开你的源文件并编译即可生成源文件可以导出成awl文件,可以在其他的环境下改写(比如记事本、excel等…

dsm php,docker dsm是什么?

docker dsm是什么?docker dsm是:从DSM6.0开始如果装了docker的话可以看到下面的图:上图可以看到创建了一个新的DSM,名字为DDSM1,经试验功能和正式DSM一模一样。同时白裙一样可以QuickConnect。然后用Putty登录上去&…

php 5.6 文档,文件存储 | 进阶系列 | Laravel 5.6 中文文档

文件存储由 学院君 创建于3年前, 最后更新于 1年前版本号 #231608 views3 likes0 collects简介Laravel 基于 Frank de Jonge 开发的 PHP 包 Flysystem 提供了强大的文件系统抽象层。Laravel 集成 Flysystem 以便使用不同驱动简化对文件系统的操作,这些驱动包括本地文…

oracle创建主键开并行,Oracle并行添加主键

2.考虑先并行添加惟一性索引,再添加主键SQL> create unique index pk_t on t(object_id) parallel 2 online; Index createdSQL> alter table t add constraint pk_t primary key (object_id); Table alteredSQL> alter index pk_t noparallel; Index alte…