小弟最近做一个测试网络的软件,用的是VC6.0,但是请教下我的发包的大小是用空间控制的,所以大小未知,请问一下,包写成了一个结构。
struct pack
{
DWORD dwSequence;//包的标记
DWORD MTime;//发包的时间,分钟
DWORD STime;//毫秒
bool IsRead;//服务器是否受到,服务器收到包以后就修改里面的值
char FillNum[1];//填充包大小,就是这里如何控制??
}
怎么控制UDP、TCP的包大小,服务器又怎么接收?或者有相关例子,请给予指点。[email protected]这是我的邮箱。还有因为要控制发包的时间,所以采用了多线程设计,一个发送,一个接收,不知道这种情况socket要创建几个?
struct pack
{
DWORD dwSequence;//包的标记
DWORD MTime;//发包的时间,分钟
DWORD STime;//毫秒
bool IsRead;//服务器是否受到,服务器收到包以后就修改里面的值
char FillNum[1];//填充包大小,就是这里如何控制??
}
怎么控制UDP、TCP的包大小,服务器又怎么接收?或者有相关例子,请给予指点。[email protected]这是我的邮箱。还有因为要控制发包的时间,所以采用了多线程设计,一个发送,一个接收,不知道这种情况socket要创建几个?
struct pack mypack;
//发送
mypack.FillNum = data_size; //數據的實際大小
send(socket,&mypack, ...);
send(socket,yourdata, ....);//接收
struct pack recvpack;
recv(socket,&recvpack, ...);
int nReadByte=recv(socket,buffer, ...);
int nSum=nReadByte;
while( nSum < recvpack.FillNum ){
nReadByte=recv(socket,buffer, ...);
nSum+=nReadByte;
}
您的代码只写了TCP的,那UDP的呢?
to:mynamelj
我看过一些资料,知道UDP包的大小不能超过1500左右,谢谢您的回答
========================================================================
书上也应该说过,有些情况下UDP包的大小不能超过500左右吧?呵呵
udp就换成recvfrom,sendto
所以自己控制数据包的大小是没有意义的。
我写的这个软件用于测试丢包率的,所以大小必须控制,我知道MTU的问题所以我打算限制出不超过1500,谢谢您的回答。
to:jsphuang
不好意思我没反应过来,但是现在知道你的意思,不好意思,但是拆包就达不到我想要的效果了。谢谢您的回答
你用多线程也没有意义,因为你的处理很简单,不会造成负担,应该比网络io要快
所以单线程就可以了,如果为了界面显示的话可以把测试放到工作线程里去。
因为发送的时候会有时间间隔,所以采用了多线程,不然不好收发包,谢谢关注!