社区
网络编程
帖子详情
UDP通信问题,接收的数据转换为16进制速度问题?
当我遇上-你
2011-09-23 04:37:33
想问些大家,现在项目要求UDP通信速度在625K/S,通信一次的有效数据长度在400个字节,一秒钟大约在1700次左右,现在遇到的问题是接收的数据是ASCII码,需要转换为16进制进行处理或者保存文件,方便查看。主要问题是转换比较浪费时间,如果不转换数据可以正常保存文件不掉包。现在考虑多线程并行处理数据,那我遇到过?有思路的指点下,最后有实例,谢谢
...全文
420
29
打赏
收藏
UDP通信问题,接收的数据转换为16进制速度问题?
想问些大家,现在项目要求UDP通信速度在625K/S,通信一次的有效数据长度在400个字节,一秒钟大约在1700次左右,现在遇到的问题是接收的数据是ASCII码,需要转换为16进制进行处理或者保存文件,方便查看。主要问题是转换比较浪费时间,如果不转换数据可以正常保存文件不掉包。现在考虑多线程并行处理数据,那我遇到过?有思路的指点下,最后有实例,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
当我遇上-你
2011-09-26
打赏
举报
回复
[Quote=引用 28 楼 believe_me 的回复:]
接收后先保存数据到缓冲里。由专门的线程来负责处理转码。
[/Quote]
不错,就这样来做的,
struct {
BYTE SensorData[4096];
int flag;
int ret;
}CJ[100000];
消化内存很大啊;呵呵,还可以优化下,先结贴了,谢谢大家
believe_me
2011-09-26
打赏
举报
回复
接收后先保存数据到缓冲里。由专门的线程来负责处理转码。
当我遇上-你
2011-09-26
打赏
举报
回复
[Quote=引用 26 楼 ndy_w 的回复:]
接收后的转换太慢了。应直接写原始的数据。需要hex方式显示时由编辑器来做(ultraedit,vs之类都可以二进制打开)
[/Quote]
必须要转换的
ndy_w
2011-09-26
打赏
举报
回复
接收后的转换太慢了。应直接写原始的数据。需要hex方式显示时由编辑器来做(ultraedit,vs之类都可以二进制打开)
ndy_w
2011-09-26
打赏
举报
回复
[Quote=引用 16 楼 wswwxk 的回复:]
UDP接收数据一次400字节,保存到BYTE bt[400]中,在
[/Quote]
fwrite(buf, sizeof(BYTE), 400, fp);
当我遇上-你
2011-09-24
打赏
举报
回复
一个线程处理也很慢的
当我遇上-你
2011-09-24
打赏
举报
回复
[Quote=引用 21 楼 hkmfk 的回复:]
不知道你懂我的意思没有?
你在主线程里应该只负责接收!你不会是在主线程里保存文件吧?如果真是这样你另开线程就没意义了!
还有试试将BUF调大点100k不行就600k,不要一点数据就开线程;
还有你的处理方法对没有你不会只开了一个BUF吧?应该开两个!
定义数据指针Byte *pThred
1,数据存buf1,buf1满了pThred=buf1;
2,开线程(hTread)处理pThr……
[/Quote]
谢谢,我试下,你之前遇到的是这么处理的吗?效果怎么样?
当我遇上-你
2011-09-24
打赏
举报
回复
[Quote=引用 22 楼 zanfeng 的回复:]
楼主只是为了看。直接保存就行了。保存下来用什么东西来看。随便你了。
[/Quote]
会掉数据,不知道你认真看贴没
足球中国
2011-09-24
打赏
举报
回复
楼主只是为了看。直接保存就行了。保存下来用什么东西来看。随便你了。
Bearnest
2011-09-24
打赏
举报
回复
不知道你懂我的意思没有?
你在主线程里应该只负责接收!你不会是在主线程里保存文件吧?如果真是这样你另开线程就没意义了!
还有试试将BUF调大点100k不行就600k,不要一点数据就开线程;
还有你的处理方法对没有你不会只开了一个BUF吧?应该开两个!
定义数据指针Byte *pThred
1,数据存buf1,buf1满了pThred=buf1;
2,开线程(hTread)处理pThred指向的数据,同时新数据存在buf2里
3,buf2满了,判断线程(hTread)是否结束
(1)如结束了,pThread=buf2,开线程(hTread)处理pThred指向的数据,重复1
(2)没结束就麻烦了,代表会丢数据,不好处理应该避免!用以下方法
<1>加大BUF
<2>优化线程函数:如不要重复文件的打开关闭操作,不要用Format格式化,直接用我那个查表法!
Bearnest
2011-09-23
打赏
举报
回复
[Quote=引用 18 楼 wswwxk 的回复:]
引用 17 楼 hkmfk 的回复:
char *str = new char[801];
char hex[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',0};
for(i = 0;i<400;i++)
{
str[2i]= hex[bt[i]&0xf0]; //高位
……
[/Quote]
这应该是最快的了!要不就在发送端处理好了直接发送字符!
不行就只有另开一个线程来转换了!这样在转换的时候才不会丢失数据!
理论上本地处理的速度应该快于网络发送速度,所以当接完新的数据线程应该也完了;但为了保险还是可以用GetExitCodeThread函数判断转换完了没有!
另外可以考虑设一个大一点的BUF来存储数据,当数据够多了才新开线程.因为新开线程也浪费时间!
为400个字节就开个线程来处理估计会还是慢,100k处理一次吧!先把数据用memcpy暂存在BUF里.
当我遇上-你
2011-09-23
打赏
举报
回复
[Quote=引用 17 楼 hkmfk 的回复:]
char *str = new char[801];
char hex[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',0};
for(i = 0;i<400;i++)
{
str[2i]= hex[bt[i]&0xf0]; //高位
str[2i+1] = hex[bt[i]&……
[/Quote]
还是慢,有好的解决方案没?
Bearnest
2011-09-23
打赏
举报
回复
char *str = new char[801];
char hex[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',0};
for(i = 0;i<400;i++)
{
str[2i]= hex[bt[i]&0xf0]; //高位
str[2i+1] = hex[bt[i]&0x0f];//低位
}
str[800]=0;
//str里是你想要的结果,但没空格!这应该是最快的算法了吧!
当我遇上-你
2011-09-23
打赏
举报
回复
[Quote=引用 15 楼 ndy_w 的回复:]
接收的数据是ASCII码,需要转换为16进制进行处理或者保存文件,方便查看。
------------------------------------------------------------
猜测:是不是传输协议是用的ascii来编码二进制的东西?你的转换就是scanf的意思?
如果这样,应该修改发送端直接发2进制。
[/Quote]
差不多就这意思,如下
UDP接收数据一次400字节,保存到BYTE bt[400]中,在
for(int i=0;i<400;i++)
{
strtemp.Format("%02X ",bt[i]); //将字符以十六进制方式送入临时变量strtemp存放
str += strtemp;
}
然后就是写数据str到文件,主要是循环浪费时间,怎么处理好呢?
不知道现在说清楚没,呵呵
ndy_w
2011-09-23
打赏
举报
回复
接收的数据是ASCII码,需要转换为16进制进行处理或者保存文件,方便查看。
------------------------------------------------------------
猜测:是不是传输协议是用的ascii来编码二进制的东西?你的转换就是scanf的意思?
如果这样,应该修改发送端直接发2进制。
当我遇上-你
2011-09-23
打赏
举报
回复
[Quote=引用 11 楼 0153 的回复:]
其实转换不是问题,问题出在存储上,磁盘IO速度是肯定跟不上的。
我碰到过类似问题,但好在我碰到的数据传输总量是有限的,所以采用先全部记在内存里,等通讯完了再存盘,分析的方法。
[/Quote]
我测试了,单独接受后在保存,接收一分钟的数据,数据量在10W*400字节,通过文件查看,已全部保存。如果加上转换的话,一分钟就只有4000*400字节,所以时间浪费在转换上面了,已经不用怀疑了,还有通讯会一直存在的,不会断的,数据需要实时的,跟网络摄像头差不多吧,呵呵
当我遇上-你
2011-09-23
打赏
举报
回复
[Quote=引用 10 楼 wwwllg 的回复:]
引用 8 楼 wswwxk 的回复:
引用 2 楼 oyljerry 的回复:
可以接收到数据后,然后交给专门的数据处理线程来转换数据,写文件等.这样就不会影响通信线程
但是转换线程的速度好像跟不上
换个好的CPU即可
[/Quote]
呵呵,不能换了,方案定了
当我遇上-你
2011-09-23
打赏
举报
回复
[Quote=引用 9 楼 ndy_w 的回复:]
不要转换啊!
引用 8 楼 wswwxk 的回复:
如果不转换数据可以正常保存文件不掉包。
所有的转换都在查看存下来的文件时进行。
[/Quote]
要转换的,还有实时图像显示,还有保存到数据库。
0153
2011-09-23
打赏
举报
回复
其实转换不是问题,问题出在存储上,磁盘IO速度是肯定跟不上的。
我碰到过类似问题,但好在我碰到的数据传输总量是有限的,所以采用先全部记在内存里,等通讯完了再存盘,分析的方法。
UDX协议
2011-09-23
打赏
举报
回复
[Quote=引用 8 楼 wswwxk 的回复:]
引用 2 楼 oyljerry 的回复:
可以接收到数据后,然后交给专门的数据处理线程来转换数据,写文件等.这样就不会影响通信线程
但是转换线程的速度好像跟不上
[/Quote]
换个好的CPU即可
加载更多回复(9)
计算机网络 传输层 TCP和
UDP
协议
Re: 计算机网络 传输层 TCP和
UDP
协议# 传输层协议 TCP 和
UDP
的应用场景 要发送的内容多,需要将发送的内容分成多个
数据
包发送(TCP) 要发送的内容少,一个
数据
包就能发送全部内容(
UDP
)# 传输层协议和应用层协议之间的关系 传输层协议加一个端口号来标识一个应用层协议, 展示了传输层协议和应用层协议之间的关系# 使用TCP/IP筛选实现网络安全 防火墙设置与端口#
UDP
协议特点和报文格式
UDP
是无连接的:即发送
数据
之前不需要建立连接
UDP
使用尽最大努力交付:即不保证可靠交付,因此主机不需要维持复杂的连接状态表# TCP 协议特点和报文格式先连接后释放;点对点;可靠传输;全双工
通信
;面向
数据
流七项标记位停止等待协议与改进的停止等待协议滑动窗口技术详解:确认Seq与选择确认SACK 超时重传时间:查询计算与自动调整 流量控制功能:点对点的流量控制 拥塞控制:相对整体网络环境而言;慢开始算法和拥塞避免算法 改进的拥塞控制:快重传和快恢复 三次握手建立TCP连接,四次挥手释放连接。# TCP 协议面临的攻击 SYN 攻击:捏造的源地址; LAND攻击:自己就是源地址# 通过抓包工具,查看以上报文格式# 习题详解
python
udp
通信
接收
16进制
_Python
UDP
Socket
16进制
数据
发送 | 学步园
特别标注:有些网站转载我的文章不标明出处,并且转载不到位,没有把相应的链接一块转过去,比如说下载链接或相关文献的链接等,导致一些网友阅读和使用出现障碍和知识的不连续,所以在此特别标注:我的这篇文章发表在CSDN博客上,可以到CSDN博客来阅读。正题:今天琢磨了一下Python
UDP
Socket
16进制
数据
发送。原以为
UDP
发送和接受的都是字符,怎么能够发送
16进制
?但细想,其实
接收
的都是“0...
C#使用
Udp
Client发送和
接收
UDP
数据
示例
16进制
与字符串互转
C#使用
Udp
Client发送和
接收
UDP
数据
示例
16进制
与字符串互转 - CSDN博客 http://blog.csdn.net/xuehuic/article/details/53812647 1.服务器 [csharp] view plain copy using System; using System.Net;
java
udp
接收
16进制
_java
UDP
通信
中十六进制的
接收
与发送
找了网上通用的
UDP
程序,当用字符串发送时如"1234567890",我这边接到显示的也有"1234567890",然而,当那边用
16进制
发时,我收到的是:"4vx3F"每两个字节为一组输出,且当
数据
中第一位...找了网上通用的
UDP
程序,当用字符串发送时如"1234567890",我这边接到显示的也有"1234567890",然而,当那边用
16进制
发时,我收到的是:"4vx3F"每两个字节为一组...
python
udp
通信
接收
16进制
_python 将字符串转化成
16进制
进行
UDP
的发送
转载自:Python
UDP
Socket
16进制
数据
发送 | 北京小芽科技http://xiaoyatec.com/2015/12/08/python-
udp
-socket-16%E8%BF%9B%E5%88%B6%E6%95%B0%E6%8D%AE%E5%8F%91%E9%80%81/http://blog.sina.com.cn/s/blog_4b5039210100f1tu.html现在...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章