從妳的程序來看,客戶端連續發送2包數據,服務器端有可能壹次就全部接到,也可能分2次收到,也可能會收2次以上才能收到。如果在發送“########helloworld”和“######whatisit”之間增加壹些延時語句,比如延時1秒,那麽可以肯定服務器端只能收到1次,因為在發送第1包數據的時候,服務器端就接收到壹次數據,而在發送第2包數據時,服務器已經不再有接收動作了。
就現在的客戶端程序來說,如果要在服務器端收到所有數據,可以考慮在服務器端循環接收數據,拼裝數據,直到收不到數據為止,然後輸出所有接收到的數據。
while(1)
{
int rr;
sock_fd = accept( sock, NULL, NULL);
retval = 0;
while(1)
{
rr = recv( sock_fd, buf1, MAX_BUFLEN, 0 );
if(rr==0) break;
memcpy(buf+retval,buf1,rr);
retval+=rr;
}
printf("buf= %s\n ##retval=%d\n",buf,retval);
write(sock_fd,"get the call\n",sizeof("get the call\n")-1);
}
可以試試看。僅供參考。
查到個函數ioctlsocket
while(1)
{ int rr;
sock_fd = accept( sock, NULL, NULL);
retval = 0;
int iMode = 1; //0:阻塞
ioctlsocket(sock_fd,FIONBIO, (u_long FAR*) &iMode);//非阻塞設置
while(1) { ....... }
........
}