我的发送端代码: if((send(sockid,BER,sizeof(BER),0))<0) { perror("there is error in sending the data"); return -1; } else { printf("Sending successfully.\n"); }
itoa(SET,m_str,10); if((send(sockid,m_str,sizeof(m_str),0))<0) { perror("there is error in sending the data\n"); //return -1; } else printf("-->%s\n",m_str); ...................后面还有很多类似的 接收端代码: do{
msgsocket=accept(socketid,(struct sockaddr*)&server_addr,&length); if(msgsocket==INVALID_SOCKET) { perror("there is error in open new socket"); break; } else do {
我在发送端发了三个John,15和6,接收端第一次接收到John,烫烫6
第二次接收正确,第三四次都接收正确,为什么阿?
发送的时候,可能是一次发送多次接收,也可能是多次发送的一次就接收了
要自己程序来处理了
是不是一次发送多次接收,就会出现“烫烫“的情况,
多次发送一次接收,就是出现把两个数据一起接收了?
自己的程序要怎样处理呢?
15丢了
函数原型是void TransferValue(int sockid,int m_iTypeNumber,int m_iElementNumber,char* buffer)
{
send(...)
}
void main()
{
char buffer[1024];TransferValue(
TransferValue(
......
}
为什么接收到的字符串最多是四位,多于四位的都截取了,我的缓冲区是1024呀,为什么?
如果不用TransferValue,都写在main中,就没有这个问题。
15丢了)
第二如果你在发送端发了多次,那么你在接收端可以采用多次接收,每次接收想要的固定的长度,当然也可以一次读出,比如你发了3次,每次2个字节,那么你可以一次读出来6个字节的长度,关于这个问题我也不太明白,但实验结果确是如此,还听其他高手来讲一下
if((send(sockid,BER,sizeof(BER),0))<0)
{
perror("there is error in sending the data");
return -1;
}
else
{
printf("Sending successfully.\n");
}
itoa(SET,m_str,10);
if((send(sockid,m_str,sizeof(m_str),0))<0)
{
perror("there is error in sending the data\n");
//return -1;
}
else
printf("-->%s\n",m_str);
...................后面还有很多类似的
接收端代码:
do{
msgsocket=accept(socketid,(struct sockaddr*)&server_addr,&length);
if(msgsocket==INVALID_SOCKET)
{
perror("there is error in open new socket");
break;
}
else do
{
memset(buffer,0,sizeof(buffer));
rval=recv(msgsocket,buffer,BUFFERLENGTH,0);
if(rval<0)
{
perror("there is error in recving");
break;
}
if(rval==0)
{
printf("ending connection....");
// closesocket(socketid);
//WSACleanup();
break;
// return 0;
}
else
{
printf("-->%s\n",buffer);
}
}while(rval!=0);
closesocket(msgsocket);
}while(TRUE);
TCP会自动组包和拆包的,所以你的程序要有拆包处理功能,你的协议一定要定义好!