可能重複:
What is the correct way of reading from a TCP socket in C/C++?如何發送和接收數據的TCP套接字(C/C++)
我試圖建立一個TCP客戶端/服務器。我的問題是,當我嘗試從客戶端發送數據時,我會在發送的數據中執行此操作。
但我的問題出現時,當我嘗試接收具有特定結構的數據,我的意思是,前8個字節設置日期,下10個名稱和未定義的字節數設置文本(本文結尾/ R/N/R/N)
客戶端發送如下:
char date[8];
char name[10];
char msg[4096];
strcpy(msg,"12/10/12"); //8 bytes
strcat(msg,"Kevin Fire"); //10 bytes
strcat(msg,"abcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcdeabcde\r\n\r\n");
nbytes_sent = send(sock,(char *)msg,sizeof(msg),0);
printf("Bytes_sent: %s -> %i\n",msg,nbytes_sent);
並且服務器嘗試從插座分析數據如下:
char date[8];
char name[10];
char * text;
char buf[1024];
int i=0;
for(i=0; i < 8; i++)
date[i] = '\0';
for(i=0; i < 10; i++)
name[i] = '\0';
nbytes_read=recv(sclient,(char *)date,sizeof(date),0);
if(nbytes_read > 0){
printf("Date: %s (%i)\n",date,nbytes_read);
//cout.flush();
nbytes_read=recv(sclient,(char *)name,sizeof(name),0);
if(nbytes_read > 0){
printf("Name: %s (%i)\n",name,nbytes_read);
//cout.flush();
nbytes_read=recv(sclient,(char *)buf,sizeof(buf),0);
strcpy(text,buf);
while(nbytes_read > 0){
nbytes_read=recv(sclient(char*)buf,sizeof(buf),0);
strcat(text,buf);
}
}
}
printf("Date: %s. Name: %s. Text: %s\n",date,name,text);
讓我猜猜,一個或所有的'recv'電話不回你問的具體數額?或者您打印的字符串沒有正確終止? –
不要僅僅標記一切在你腦袋裏飛馳而過的東西。對UDP進行標記絕對沒有任何理由,除非有非常明確的標記兩者的理由,否則應該標記C或C++。 – Wug
這應該是C或C++(用*標記*) – WhozCraig