社区
网络编程
帖子详情
怎么接受长度变化的数据包?
nalevoli
2004-06-15 02:40:30
怎么接受长度变化的数据包?
视频服务器端有每秒5k左右的数据包要向客户端发送,
在客户端怎么接受这些长度不等的数据包??只有服务器端才知道每一个数据包的大小
...全文
242
15
打赏
收藏
怎么接受长度变化的数据包?
怎么接受长度变化的数据包? 视频服务器端有每秒5k左右的数据包要向客户端发送, 在客户端怎么接受这些长度不等的数据包??只有服务器端才知道每一个数据包的大小
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nalevoli
2004-06-24
打赏
举报
回复
chang长度在视频头信息结构里头有啊,也就是pPlayInfo里头的biSizeImage
huang_yu
2004-06-24
打赏
举报
回复
在包里定义内容长度吧。
nalevoli
2004-06-24
打赏
举报
回复
我用socket传输视频数据,服务器端负责不断发送捕捉到的视频数据,
每一帧的视频由40个字节的视频头部(包含了视频数据的大小)加上其后可变长度
的视频数据,
客户端负责接受和播放数据,我是用socket api来写的,
但是客户端只接受了一会儿就死掉了,不知道是怎么回事???
而服务器端还是不断发送数据,怎么解决,请大家帮忙,我狂散分
客户端只负责接受我是这样的:
for(;;)
{ TotalDataRece =0; //总共已经接受到的数据
EachDataRece = 0; //每次实际接受到的数据
EachDataToRead = 0; //每次需要读取的数据
if((TotalDataRece = recv(recesock, pData, 1024, 0)) <0)
{
int a = GetLastError();
sprintf(szBuf, "WinSock receive error code : %d", WSAGetLastError());
AfxMessageBox(szBuf);
closesocket(recesock);
return -1;
}
memcpy(pPlayInfo, pData, 40);
//接受数据的前40个字节包含了每一视频帧的信息,包括视频数据的大小
dSize = pPlayInfo->biSizeImage; //每一帧视频数据的大小
if(dSize == 0)
{
AfxMessageBox("receive error !");
return -1;
}
len = dSize + 40; //每一帧的总共大小,视频头+视频数据
while (TotalDataRece < len)
{
EachDataToRead = min(1024, len-TotalDataRece);
//每一帧的数据量len在4k-10k之间大小不等。
if((EachDataRece = recv(recesock, pData+TotalDataRece, EachDataToRead, 0))<0)
{
int a = GetLastError();
sprintf(szBuf, "WinSock receive error code : %d", WSAGetLastError());
AfxMessageBox(szBuf);
closesocket(recesock);
return -1;
}
TotalDataRece += EachDataRece;
}
VideoPlayback(pData); //播放收到的每一个视频帧,另外一个函数,
这是程序的客户端,只能接受大概4-5秒钟,就停在哪儿了,不能正确播放,
而服务器端还在发送数据,这个是怎么回事,请大侠不吝赐教
m0772
2004-06-21
打赏
举报
回复
head+body的方法,可是接收时怎么办呢?先收head再收body吗?可是我这么用的,就是有点问题,我用的是MFC中的CSocket来写的,我的问题在
http://community.csdn.net/Expert/topic/3098/3098417.xml?temp=.5185816
请各位好心人帮我看看!多谢了?
nalevoli
2004-06-17
打赏
举报
回复
视频数据是有一个header是bitmapinfoheader结构的,这个header是40个字节,该结构
中指明了其后的视频数据的大小,难道每次发送都分开发送,向发送视频头40个字节,
再发送视频数据???是不是这样的??
例如每一帧视频分开发送,先发送40个视频字节的头部,再发送视频数据??是这样的么??
qrlvls
2004-06-17
打赏
举报
回复
要么在数据包中加入数据长度域
要么你的数据是以固定的其它格式封装的
wqs_qiu_shi
2004-06-16
打赏
举报
回复
视频应该是客户方吧.
结构体
struct
{
int 包长;
char 包体[];
}
蒋晟
2004-06-16
打赏
举报
回复
拆包吧
luoxiangdong
2004-06-16
打赏
举报
回复
head+body
fengge8ylf
2004-06-16
打赏
举报
回复
象 wqs_qiu_shi(美丽心情) 那样 解析的时候先解析出包长,也就是数据包的前四个字节 然后根据包长解析出包体
jiajie828
2004-06-16
打赏
举报
回复
加字段标包长!
nonocast
2004-06-15
打赏
举报
回复
包首加一个固定长度的字段标识该包的长度即可
May you succeed!
sboom
2004-06-15
打赏
举报
回复
就像 yhqs540(半夜3点钟) 说的
catyou
2004-06-15
打赏
举报
回复
ye, if socket is TCP, the normal protocol has one field to set packet length
yhqs540
2004-06-15
打赏
举报
回复
那你可以在数据包头里面加入表示大小的项。或者接受的时候设定一个结束符
IP、TCP、UDP
数据包
长度
问题
IP
数据包
长度
问题总结 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是数据帧{IP包{TCP或UDP包{Data}}} ----------------------------------------...
IP
数据包
长度
问题总结
首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} -----------------------------------------
stm32学习笔记---USART串口
数据包
(理论部分)
我们之前学习了串口的代码,发送一个字节,接收一个字节都没问题。但在实际应用中,我们可能需要把多个字节打包为一个整体进行发送。比如说我们有个陀螺仪传感器,需要用串口发送数据STM32。陀螺仪的数据,比如x轴一个字节,y轴一个字节,z轴一个字节,总共三个数据需要连续不断的发送,当你像这样xyzxyzxyz连续发送的时候,就会出现一个问题,就是接收方不知道这数据哪个对应x,哪个对应y,哪个对应z,因为接收方可能会从任意位置开始接收,所以会出现数据错位的现象。 这时候我们就需要研究一种方式,把这个数据进行分割,把x
数据链路层数据帧格式及网络层IP
数据包
格式
首部
长度
:0.5字节(4比特),以四字节为单位,例如0101指代的是IP
数据包
首部
长度
为20字节(最小),1111指代的是IP
数据包
首部
长度
为60字节(最大,20字节的固定部分加上40字节的可选部分)TTL:1字节(8比特),生存周期,最大为255,最初以秒为单位,每1秒TTL减1,现以路由跳转的个数为单位,数据报每经过一个路由,TTL减1,TTL为0时,
数据包
被丢弃。总
长度
:2字节(16比特),包含首部
长度
和数据
长度
之和,以字节为单位,最大值为2^16-1字节。
IP
数据包
长度
问题
本文摘自:http://blog.sina.com.cn/s/blog_6fe0d70d01011d23.html 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章