怎么接受长度变化的数据包?
视频服务器端有每秒5k左右的数据包要向客户端发送,
在客户端怎么接受这些长度不等的数据包??只有服务器端才知道每一个数据包的大小
视频服务器端有每秒5k左右的数据包要向客户端发送,
在客户端怎么接受这些长度不等的数据包??只有服务器端才知道每一个数据包的大小
解决方案 »
- fatal error C1076: compiler limit : internal heap limit reached; use /Zm to spec
- vs2008 析构函数
- 如何在对话框上添加侧栏隐藏按钮?
- listbox的搜索问题
- 关于在对话条中显示位图的问题
- GDI有些系统泄露,有些不会!有遇到这种情况的进,求指教~!
- 字符串
- 请问一个安装程序的注册表操作的问题,有实际经验的高手请进。
- unsigned int h_len:4是怎么定义h_len的长度的?
- 哪位有jsoncpp for vc6.0
- 在线等!一个小问题,如何得到上级目录??
- ★★★基础太差,char怎么在赋值时才确定长度,就是任意长度都能赋进去?★★★
struct
{
int 包长;
char 包体[];
}
中指明了其后的视频数据的大小,难道每次发送都分开发送,向发送视频头40个字节,
再发送视频数据???是不是这样的??
例如每一帧视频分开发送,先发送40个视频字节的头部,再发送视频数据??是这样的么??
http://community.csdn.net/Expert/topic/3098/3098417.xml?temp=.5185816
请各位好心人帮我看看!多谢了?
每一帧的视频由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秒钟,就停在哪儿了,不能正确播放,
而服务器端还在发送数据,这个是怎么回事,请大侠不吝赐教