C# TCP数据包的接收

zjywzhb 2015-01-28 02:34:27
我利用DSP中的串口向外发送8比特的数据,并且该串口是和USR-WIFI232连接在一起的(WIFI232 系列产品用于实现串口到WIFI 数据包的双向透明转发,用户无需关心具体细节,模块内部完成协议转换,串口一侧串口数据透明传输,WIFI 网络一侧是TCPIP 数据包,通过简单设置即可指定工作细节),目前能确定的是对WIFI的设置是没有问题的,我能够从上位机软件向DSP发送指令,DSP能收到,并且能正常的运行。但是我的上位机软件无法接收到运行之后发出来的数据。不知道是不是我写的接收程序有问题!

接收程序内容如下:::这里还想把2次接收到的8进制数一起合并成16进制数,但目前上面都收不到!!求教呀!
private void ReceiveMsg()
{
while (true)
{
try
{
//获取数据
byte[] getData = new byte[1024];
ns.Read(getData, 0, getData.Length);
//转化为字符串形式
string msg = Encoding.Default.GetString(getData);
if (temp4_2 == 1)
{
if (int.TryParse(msg, out _msg_2) == false)
throw new Exception("msg节点不是数字");
msg1_2 = _msg_2.ToString();
_msg_2 = Convert.ToInt32(msg1_2, 2);
_msg_2 = _msg_2 * 256;

}
else
if (temp4_2 == 2)
{
if (int.TryParse(msg, out _msg1_2) == false)
throw new Exception("msg节点不是数字");
msg1_2 = _msg1_2.ToString();
_msg1_2 = Convert.ToInt32(msg1_2, 2);
_msg1_2 = _msg1_2 + _msg_2;
temp4_2 = 0;
msg2_2 = Convert.ToString(_msg1_2, 16);
textBox16.Text = msg2_2;
_msg2_2 = Convert.ToInt32(msg2_2, 16);
_msg2_2 = _msg2_2 / 65535 * 5;
textBox15.Text = _msg2_2.ToString("F6");
IsReceiveMsg.Invoke(showReceiveMsgCallBack, msg2_2);
else
temp4_2 = 0;
temp4_2++;
}

catch (ThreadAbortException)
{
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
//释放相关的系统资源
if (ns != null)
ns.Dispose();

break;
}

}
}
...全文
238 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2015-01-28
  • 打赏
  • 举报
回复
数据接收建议放到单独线程中去,放在主线程中, 又采有阻塞模式,很容易就出现程序无响应的状况
xian_wwq 2015-01-28
  • 打赏
  • 举报
回复
数据接收注意这几点: 1.数据接收和解析分离。 通过队列或者其他容器,实现解析异步化,数据量过大,考虑使用线程池。 2.数据通讯调试要多打印日志信息,同日志信息查看运行情况,靠断点调试是不可靠的。 3.可以借助minisniffer等抓包工具,确认所在机器已经收到了数据
zjywzhb 2015-01-28
  • 打赏
  • 举报
回复
引用 1 楼 csjtxy 的回复:
顶起,别沉了         
你有做过这个东西的吗?
csjtxy 2015-01-28
  • 打赏
  • 举报
回复
顶起,别沉了         

110,555

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧