社区
通信技术
帖子详情
socket 第一次能接收到数据 第二次就接收不到了呢???
qq_15084153
2018-07-06 04:58:20
我现在有一个winform的服务端程序,调试助手,以及终端设备。
流程:调试助手是模拟web端下发指令。 web端下发指令给服务端,服务端和web端设定的协议进行解析,再根据和终端设备的协议 进行下发指令,终端接收后返回给服务端,再返回给web端
现在的问题是 第一次流程是没问题的,再下发指令,终端有反应,但是终端返回的数据服务端接收不到
...全文
807
4
打赏
收藏
socket 第一次能接收到数据 第二次就接收不到了呢???
我现在有一个winform的服务端程序,调试助手,以及终端设备。 流程:调试助手是模拟web端下发指令。 web端下发指令给服务端,服务端和web端设定的协议进行解析,再根据和终端设备的协议 进行下发指令,终端接收后返回给服务端,再返回给web端 现在的问题是 第一次流程是没问题的,再下发指令,终端有反应,但是终端返回的数据服务端接收不到
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq_15084153
2018-07-07
打赏
举报
回复
有木有大神帮忙解答一下呀
qq_15084153
2018-07-06
打赏
举报
回复
服务端和终端一直可以接收发送,加入web端进来 就第一次可以接收发送,第二次就收不到终端返回数据了。请教一下是什么原因呢
qq_15084153
2018-07-06
打赏
举报
回复
代码如下
private void GetTheadList()
{
try
{
//开启一个新线程不断接受用户的连接请求
ThreadPool.QueueUserWorkItem(new WaitCallback(skObj =>
{
skConnP = skObj as Socket;
//通过循环不断接受用户的连接请求
while (true)
{
//阻塞线程,等待用户的连接请求;每次只能连接一个,到处理到下面线程开启
//接收用户消息,那么重新等待;因为新开的线程不阻塞这里,本来线程不用等待
skCommu = skConnP.Accept();
//获取客户端信息
string userinfo = skCommu.RemoteEndPoint.ToString();
ShowMessage(DateTime.Now.ToString("HH:mm:ss fff") + "--[" + userinfo + "]连接成功");
lstUser.Invoke(new Action<string>(u =>
{
lstUser.Items.Add(u);
}), userinfo);
if (!_dict.ContainsKey(userinfo))
{
_dict.Add(userinfo, skCommu);
}
//再启动一个线程来循环接收用户发来的消息
ThreadPool.QueueUserWorkItem(new WaitCallback(skCommuObj =>
{
//启动该线程用来处理客户端不断发来的消息,用单独线程来执行
//while-true循环,防止阻塞主线程。主线程要继续执行调用Accept()的方法,来接收其他的客户端连接。
skCommuP = skCommuObj as Socket;
while (true)
{
byte[] buffers = new byte[1024 * 1024 * 2];
// //返回值表示实际接收到的字节数;这儿会阻塞线程,不会走,所以程序不会死;跟BlockingCollection<> 一样
skCommuP.ReceiveBufferSize = 8192;
int totalNumberOfBytes = 0;
int len = skCommuP.Receive(buffers, totalNumberOfBytes, skCommuP.ReceiveBufferSize, SocketFlags.None);
if (len==0||!skCommuP.Connected)
{
if (_dict.ContainsKey(userinfo))
{
_dict.Remove(userinfo);
}
if (skCommuP == Gloable.skWebComm)
Gloable.skWebComm = null;
if (Gloable._dictId.ContainsKey(skCommuP))
{
SendDataToWeb.SendData(skCommuP, Gloable.LoginOut, "退出登录");
Gloable._dictId.Remove(skCommuP);
}
//当客户端退出以后,在log文本框中显示用户退出的信息
ShowMessage(DateTime.Now.ToString("HH:mm:ss fff") + "--[" + skCommuP.RemoteEndPoint.ToString() + "]退出了。");
//从ListBox中删除当前用户
lstUser.Invoke(new Action<string>(x =>
{
lstUser.Items.Remove(x);
}), skCommuP.RemoteEndPoint.ToString());
break;
}
else
{
string userMessage = Concat.ToHexString2(buffers, len);
string str = DateTime.Now.ToString("HH:mm:ss fff") + "--[" + skCommuP.RemoteEndPoint.ToString() + "]接收:" + userMessage;
LogHelper.Instance.Info(str);
ShowMessage(str);
if (buffers[0] == 0x78 && buffers[1] == 0x78 && buffers[len - 2] == 0x0D && buffers[len - 1] == 0x0A)
{
PacketParser(buffers, len, skCommuP);
buffers = null;
}
else if (buffers[0] == 0x3D && buffers[1] == 0x3D)
{
InstructHandlerParser.WebToServerInstruct(buffers, len, skCommuP);
buffers = null;
}
}
}
}), skCommu);
}
}), listenSocket);
Thread replacementThread = new Thread(new ThreadStart(ReplacementToWeb));
replacementThread.Start();
}
catch (Exception ex)
{
LogHelper.Instance.Error(DateTime.Now.ToString("HH:mm:ss fff") + "--[程序出错]" + ex);
}
}
Linux
Socket
编程实战第1季第1部分
3、网络技术方面初级的一步步进入linux
socket
编程的世界; 本课程是linux
socket
编程的一小部分,从无名套接口开始, 然后逐步深入,这应该是很多课程所没有的。 以通俗的比照讲清楚一些概念,更多的是如何一步步...
Socket
Receive
数据
一次性
接收
不全的问题
转载:http://blog.csdn.net/e_wsq/article/details/15496533 在发送端,一次发送4092个字节, 在
接收
端,一次
接收
4092个字节, 但是在
接收
端,偶尔会出现
socket
.receive
接收
不全的情况 , ret = sockTemp.Receive(bBuffer,iBuf...
qudp
socket
信号不触发_QT下udp
socket
一段时间
接收
不到
数据
的问题
最近在做一个项目 采用UDP
SOCKET
进行
数据
的传输,发现在一段时间后,UDP
接收
不到
数据
了,找了很久的资料 才发现解决该问题的方法,估计不是最好的。代码如下:#include "mainwindow.h"#include "ui_mainwindow.h"#include MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent)...
java
socket
直接访问netty服务器中
数据
接收
不全的问题
在项目中,通过netty框架搭建的服务器。但是在Android端我想直接采用
Socket
与服务器通信。但是在这个过程中遇到两个问题。1.服务器
接收
不到
数据
解决方法:我发送的形式是直接将字符串转成字节流,按照tcp协议进行发送的。一开始服务器能看到客户端接入了,但是就是收
不到
消息。后来在字符串的末尾加上了'\n'换行符就行了。2.服务器发送
数据
时,客户端
接收
的
数据
是一串奇怪的字符串。例如:[@Bd3...
socket
通信报文接受不完整或者
接收
不到
的问题
一、问题描述:
socket
通信中经常会遇到返回报文
接收
不全甚至完全没有
接收
到的问题。 二、解决方案: 发送方在报文头用固定长度的字节声明该报文正文长度,注意这里的报文正文不包括表示报文长度的字符串本身。
接收
方在
接收
报文时先按约定读取报文长度的声明,转换为数字类型,再根据该长度读取报文内容,以避免漏读的情况。 三、代码实现(Java): 以8位长度的报文头表示报文正文长度为例,此时报文
接收
方的示例...
通信技术
4,358
社区成员
28,927
社区内容
发帖
与我相关
我的任务
通信技术
通信技术相关讨论
复制链接
扫一扫
分享
社区描述
通信技术相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章