使用的是WINSOCK,
代码如下:
发送方:
....
int sendLen=::sendto(cltSock,buf,sizeof(buf),0,(SOCKADDR*)&targetAddr,sizeof(SOCKADDR));
if(sendLen==SOCKET_ERROR)
{
return FALSE;
}else{
return TRUE;
}
接收方:
recvLen=::recvfrom(svrSock,recvChars,sizeof(recvChars),0,(SOCKADDR*)&cltAddr,&intSockaddrLen);
if(recvLen!=SOCKET_ERROR)
{
recvChars[recvLen]='\0';

str.Format("消息来自(%s): %s",inet_ntoa(cltAddr.sin_addr),recvChars);
AfxMessageBox(str);

memset(recvChars,0,sizeof(recvChars));

}
现在的问题是为什么我每次只能发送出4个字符?比如我发送"abcdefg",接收方每次都只能收到abcd四个字符.(接收和发送都在本机127.0.0.1)
我知道UDP是不保证传输的完整性的,但每次只能传4个字符也太少了吧?是不是有什么地方不对啊???
我是从.NET转到VC的,在.NET里使用UDP发到本机的数据几千个节符都不会丢包(发到外网会丢),但这里只才发几个字符就丢包了????

解决方案 »

  1.   

    int sendLen=::sendto(cltSock,buf,sizeof(buf),0,(SOCKADDR*)&targetAddr,sizeof(SOCKADDR)); 
    你定义的buf变量是一个指针,而不是一个数组变量吧?
    sizeof(buf) == 4; 因此每次发送的字节数为4个字节int sendLen=::sendto(cltSock,buf,strlen(buf),0,(SOCKADDR*)&targetAddr,sizeof(SOCKADDR)); 
      

  2.   

    recvLen=::recvfrom(svrSock,recvChars,sizeof(recvChars),0,(SOCKADDR*)&cltAddr,&intSockaddrLen); 
    这里recvChars变量必须是一个数组变量,不然的话,你也又是每次只能接收到四个字节了.recvChars定义
    char recvChars[256];