我写了一个简单的代码来的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(“哦,不,致命失败”);没问题,让我们继续......' –