我寫了一個簡單的代碼來的send()和的recv()的數據,但我得到了錯誤爲-1,而我的recv()數據。發送不會給出任何錯誤。套接字的send()和recv()不工作
Server代碼:
struct sockaddr_in name;
char *buf;
int main(int agrc, char** argv) {
int sock, new_sd; //sock is this socket, new_sd is connection socket
int adrlen, cnt;
name.sin_family=AF_INET;
name.sin_port=htons(6050);
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("\nserver socket failure ");
printf("\nServer: ");
exit(1);
}
printf("sockfd=%d\n",sock);
adrlen=(socklen_t)sizeof(name);
if((bind (sock,(struct sockaddr *)&name,adrlen)) < 0)
printf("\nBind failure");
if(listen(sock, 5) < 0)
printf("\nlisten error ");
printf("listen done\n");
while(1) {
if(new_sd =(accept(sock,(struct sockaddr *)&name,(socklen_t*)&adrlen)) < 0) {
printf("\nserver accept failure ");
exit(1);
}
printf("new_sd=%d",new_sd);
buf = (char *)malloc(14);
if((recv(new_sd,(void *)buf,14,MSG_WAITALL)) < 0){
printf("\nError receiving data ");
exit(1);
}
} //end while
return 0;
}
客戶端代碼:
char buf[14];
struct sockaddr_in name;
int main(int agrc, char** argv) {
int sock, new_sd, adrlen, cnt;
name.sin_family=AF_INET;
name.sin_port=htons(6050);
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("\nserver socket failure ");
printf("\nServer: ");
exit(1);
}
//stuff for server socket
printf("sock is %d\n",sock);
adrlen=(socklen_t)sizeof(name);
if((connect(sock,(struct sockaddr *)&name,adrlen)) < 0) {
printf("\nclient connection failure ");
exit(1);
}
printf("\nSuccessful connection from client 1");
strcpy(buf,"\nclientsend");
if((send(sock,(void *)buf,strlen(buf), 0)) < 0) {
printf("\nError sending data from client 1 ");
exit(1);
}
printf("\nExiting normally");
return 0;
}
代碼太多,關於錯誤的細節太少。至少打印出錯誤信息(使用'perror'),以便知道導致recv失敗的原因。 – Mat
你忘了在'struct sockaddr_in'結構中添加你要連接的地址。 – Unknown
錯誤處理是......呃......'printf(「哦,不,致命失敗」);沒問題,讓我們繼續......' –