nio socket 异步客户端读取时的问题!

问题描述

最近学习java的nio socket非阻塞模式编程服务器端发送信息格式如下: 8位的头部包含类型和信息的长度 如 LLWH002001234567890123456789,后面的信息中包含gb2312编码的汉字。写客户端的时候碰到个问题:SocketChannel的read(ByteBuffer[] dsts, int offset, int length)方法还没弄清楚怎么使用。服务端发来 LLWH002001234567890123456789 这个消息时,用read(ByteBuffer dst) 这个方法读取到信息经常是分成好多段,怎么才能把全部信息读取到ByteBuffer里头。现在的代码如下:  public void Rec() throws IOException { int count; r_buff.clear(); count = sc.read(r_buff); r_buff.flip(); byte[] temp = new byte[r_buff.limit()]; r_buff.get(temp); System.out.println("reply is " + count + " long, and content is: " + new String(temp)); }

解决方案

我怎么觉得应该是发送时出的问题呢……你看一下你是不是分段发送的,我觉得这样接收的话是没问题的,因为我也是这样做的……
解决方案二:
还有可能是你的r_buff不够大……我猜……

时间: 2024-10-30 08:21:04

nio socket 异步客户端读取时的问题!的相关文章

java nio socket 异步接收数据

问题描述 nio socket 异步接收数据,如何确定收接的数据,就是发送的返回的?有谁研究过没. 问题补充:如果不用id,nio客户端是否可以同步接收数据呢?是把socketChannel.configureBlocking(true)吗? 解决方案 在消息中增加UUID,在调用端记录UUID,并将UUID和消息一起发送到服务端,服务端的回传消息附件上UUID,调用端根据收到的消息包含的UUID确定给哪个调用者.解决方案二:异步调用的常见问题.因为没有办法实施返回,只有打标志了.要你把通信协议

io流-客户端读取服务端回执信息时出现error:org.apache.http.ConnectionClosedException

问题描述 客户端读取服务端回执信息时出现error:org.apache.http.ConnectionClosedException 具体error: org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body . (好像是回执信息数据太大) 网上搜了下,大概意思就是 : 本来在接管数据量,程序员显式封闭了连接(同步调用),而netty是异步处理惩罚,当连接被

TCP通信socket异步,客户端报异常:目标主机积极拒绝

问题描述 TCP通信socket异步,客户端报异常:目标主机积极拒绝 服务端只监听时,客户端建立1500个连接请求都可以正常建立连接,但当服务端改成建立连接后触发一个事件给客户端发送数据时,客户端异常:目标主机积极拒绝,只能建立部分连接.是何原因,希望有老师可以指点一下.不胜感激!! 解决方案 Socket(Tcp)通信客户端 解决方案二: 客户端接收的数据是否正确处理,然后就是看一下你服务器发送数据给客户端后,是不是关闭了连接

c# 2.0-C#用Socket异步时出现错误

问题描述 C#用Socket异步时出现错误 各位大侠: 我刚用 C# 写Socket 代码,服务器端用异步监控客户端,代码如下 //开启服务器端监控---Begin internal void MonitorClient() { IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 端口号); Socket serverSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolT

io流-socket 客户端读取服务端发送的 序列化流 报错

问题描述 socket 客户端读取服务端发送的 序列化流 报错 客户端 服务端 请大神指教,实在找不到原因了,对这块儿也不是很熟 解决方案 socket调用了一次getInputStream时,但又需要把这个socket的相关信息作为参数传递给别的对象时,应注意:不用直接把socket传过去,应该把对应的ObjectInputStream或ObjectOutputStream对象传递过去. 解决方案二: 直接读写Object,使用java自己的序列化不可以吗?

编写Socket客户端和服务器程序,客户端读取本地文件的数据,发送到服务器,服务器接收并存储到文件中。

问题描述 2.编写Socket客户端和服务器程序,客户端读取本地文件的数据,发送到服务器,服务器接收并存储到文件中.消息格式:字段长度(单位字节)内容--------------------------------------------------------------------len8整个消息长度,不包括这4个字节,类型为longfile_name_length1文件名长度,bytefile_namefile_name_length文件名,Stringdata_length8文件数据长度

android通过socket通信实现客户端读取服务端的二进制数据,并展示在textview控件上

问题描述 android通过socket通信实现客户端读取服务端的二进制数据,并展示在textview控件上 客户端通过socket通信,完成读取服务端的二进制数据读取,并将数据显示在textview控件上,数据全为整型 解决方案 之前接触一些,但不是我我写的.JNI中C读取,生成Native方法.上层调用 解决方案二: 底层c来封装so文件调用socket API.上面Java调用so 解决方案三: ....java自己有socket啊,ls各位回答的什么意思.... 简单的socket网上教

js中写入信息,在html中读取时出现问题

问题描述 js中写入信息,在html中读取时出现问题 我的js代码是 var arr = [ { id: 0, name: "张三", department: "外科", image:"/images/doctor.png" }, { id: 1, name: "张三", department: "外科", image:"/images/doctor.png" }, { id: 2, n

php简单socket服务器客户端代码实例_php技巧

本篇文章分享一个简单的socket示例,用php.实现一个接收输入字符串,处理并返回这个字符串到客户端的TCP服务. 产生一个 socket 服务端 <?php /*文件名:socket_server.php*/ // 设置一些基本的变量 $host="127.0.0.1";//Socket运行的服务器的IP地址 $port=1234;//Socket运行的服务器的端口,端口取值为1到65535之间的数字,前提是这个端口未被使用 // 设置超时时间,这里设置为永不超时,确保PHP