如何解决如何在两个远程主机上运行UDP客户端和服务器在C中?
我是套接字编程的新手。我为UDP Client和Server编写了代码,这些代码在我的计算机上可以正常工作。我想在两个不同的主机上运行这些程序,即我计算机上的服务器和我朋友计算机上的客户端。没有路由器怎么办?请说明是否为此目的对代码进行了任何特定的更改。
这是代码:
接收器
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<netinet/ip.h>
#include<string.h>
#include<unistd.h>
int main() {
int ret = socket(AF_INET,SOCK_DGRAM,0);
if (ret == -1) {
printf("socket creation fails\n");
exit(0);
} else
printf("socket creation succeeds\n");
struct sockaddr_in sender;
int port;
printf("Enter port:");
scanf("%d",& port);
sender.sin_family = AF_INET;
sender.sin_port = htons(port);
sender.sin_addr.s_addr = INADDR_ANY;
int ret1;
ret1 = bind(ret,(struct sockaddr * ) & sender,sizeof(sender));
if (ret1 == -1) {
printf("socket binding fails\n");
exit(0);
}
printf("socket binding succeeds\n");
struct sockaddr_in receiver;
char str[15],str2[15];
int addrlen = sizeof(receiver);
while (1) {
int rec = recvfrom(ret,str,sizeof(str),(struct sockaddr * ) & receiver,& addrlen);
printf("Received:");
str[rec] = '\0';
if (strcmp(str,"exit") == 0)
break;
if (rec == -1) {
printf("recvfrom fails\n");
exit(0);
}
printf("%s\n",str);
printf("Enter :");
scanf("%s",str2);
int recsend = sendto(ret,str2,strlen(str2),sizeof(receiver));
if (recsend == -1) {
printf("sendto fails");
exit(0);
}
if (strcmp(str2,"exit") == 0)
break;
}
close(ret);
return 0;
}
发件人
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<netinet/ip.h>
#include<string.h>
#include<unistd.h>
int main() {
int ret = socket(AF_INET,0);
if (ret == -1) {
printf("\nsocket creation fails");
exit(0);
} else
printf("\nsocket creation succeeds");
struct sockaddr_in receiver;
int port;
printf("\nEnter port:");
scanf("%d",& port);
receiver.sin_family = AF_INET;
receiver.sin_port = htons(port);
receiver.sin_addr.s_addr = INADDR_ANY;
char str[15],str2[15];
int addrlen1 = sizeof(receiver);
struct sockaddr_in sender;
int addrlen = sizeof(sender);
while (1) {
printf("Enter:");
scanf("%s",str);
int send = sendto(ret,strlen(str),addrlen1);
if (send == -1) {
printf("sendto fails");
exit(0);
}
if (strcmp(str,"exit") == 0)
break;
int senrec = recvfrom(ret,sizeof(str2),& addrlen);
printf("\n");
printf("Received:");
str2[senrec] = '\0';
if (strcmp(str2,"exit") == 0)
break;
if (senrec == -1) {
printf("recvfrom fails\n");
exit(0);
}
printf("%s\n",str2);
}
close(ret);
return 0;
}
解决方法
将两者都连接到不同的网络并获取服务器的IP地址。
将客户的receiver
IP和端口更改为:
receiver.sin_addr.s_addr = inet_addr("8.8.8.8"); // Ip address of your server.
receiver.sin_port=htons(port); // Whatever port your server is listening to
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。