Sockets 在C语言中,服务器和客户端程序之间同时发送()和recv()?
我正在做一个程序,我有一个客户端和服务器。客户端通过发送包含“ping”的消息来“ping”服务器。当服务器收到“ping”时,它应该发回一个“got_it” 我已经能够发送“ping”,服务器已经接收到它,并发送回“got_it”,但我的客户无法接收它 我需要做两个插座吗? 这是我客户的密码Sockets 在C语言中,服务器和客户端程序之间同时发送()和recv()?,sockets,tcp,send,tcpclient,recv,Sockets,Tcp,Send,Tcpclient,Recv,我正在做一个程序,我有一个客户端和服务器。客户端通过发送包含“ping”的消息来“ping”服务器。当服务器收到“ping”时,它应该发回一个“got_it” 我已经能够发送“ping”,服务器已经接收到它,并发送回“got_it”,但我的客户无法接收它 我需要做两个插座吗? 这是我客户的密码 int main(int argc, char **argv) { int sockfd; struct sockaddr_in servaddr; socklen_t len = sizeo
int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in servaddr;
socklen_t len = sizeof(servaddr);
char mesg[1024];
char mesg2[1024];
char cli_ip[32];
if(argc!=2){
printf("Usage: %s <ip_addr>\n",argv[0]);
return -EINVAL;
}
sockfd = socket(PF_INET,SOCK_STREAM,0);
if(sockfd<0) {
perror("socket: ");
return -EIO;
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(54321);
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
if(connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr))<0){
perror("connect: ");
close(sockfd);
return -EIO;
}
while(1){
memset(mesg2,0,sizeof(mesg2));
if(recv(sockfd,mesg2,sizeof(mesg2),0) > 0 ){
puts(mesg2);
}
fgets(mesg,sizeof(mesg),stdin);
send(sockfd,mesg,strlen(mesg),0);
}
close(sockfd);
return 0;
}
int main(int argc,char**argv)
{
int-sockfd;
servaddr中的结构sockaddr_;
socklen_t len=sizeof(servaddr);
char-mesg[1024];
char-mesg2[1024];
char cli_ip[32];
如果(argc!=2){
printf(“用法:%s\n”,argv[0]);
返回-艾因瓦尔;
}
sockfd=套接字(PF_INET,SOCK_STREAM,0);
如果(sockfd)你确定服务器响应正确吗?你是否测试过,当你使用其他工具(如telnet)时,它会发送“got_it”消息?@j_random_hacker我很确定服务器工作正常。客户端是有问题的。当我运行客户端时,它会卡在recv()部分,但当我删除recv()时函数它运行平稳。您的客户端在调用send()
之前调用了recv()
!它什么时候发送过“ping”消息?@j_random_hacker好的。因此,我编辑了代码,在recv()之前调用了send()。它现在收到了“got_it”。耶!但是如果我发送的不是“ping”,它就会卡在recv()上再次分手。似乎如果它没有收到任何东西,它就会被卡在那里。我不知道你期望发生什么——等待消息就是recv()的工作!