我正在尝试将 DHCP 服务器模拟为大学任务。需要执行至少 2 个服务器(或更多,最多 255 个),因为多个客户端将使用 BROADCAST 向这些服务器发送消息(这就是“仅”255 个服务器的限制的来源)。
但是当我试图在 Ubuntu 的 2 个不同终端中执行 2 个服务器时,执行的第二个服务器被拒绝。我猜这是由于同一本地主机上的 IP 或其他原因(对不起,我对通信协议不太了解)
如何在同一台机器上运行多个服务器?我们的老师告诉我们使用VMWare运行另一个Linux操作系统,并尝试运行两者,但对我来说这个解决方案与我的想法相去甚远......我将发布服务器和客户端连接语句,虽然我不知道是否C 语句或操作系统配置等存在问题。
服务器:
int sockfd, newsockfd, clilen, n;
struct sockaddr_in cli_addr, serv_addr ;
char host_name[200];
int size = sizeof(struct DHCP);
char buffer[size];
struct MACIP *macip;
if ((sockfd = socket(AF_INET, SOCK_DGRAM,0)) < 0) {
printf("server: can't open datagram socket\n");
return -1;
}
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(0);
serv_addr.sin_port = htons(SERV_UDP_PORT);
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) <0) {
printf("server: can't bind local address\n");
return -1;
}
客户:
int sockfd, n, clilen;
struct sockaddr_in serv_addr, cli_addr;
char serv_host_addr[30];
int size = sizeof(struct DHCP);
char buffer[size];
printf("Dirección IP del servidor (a.b.c.d) => ");
gets(serv_host_addr);
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("client: can't open datagram socket");
return -1;
}
int opt=1;
if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST,&opt, sizeof(opt))<0) {
perror("Error opcion socket");
close(sockfd);
return 1;
}
bzero((char *)&cli_addr,sizeof(cli_addr));
cli_addr.sin_family = AF_INET;
if (bind(sockfd, (struct sockaddr *) &cli_addr,sizeof(cli_addr)) < 0) {
perror("client: can't bind a port");
return -1;
}
serv_addr.sin_family = AF_INET;
inet_pton(AF_INET, serv_host_addr,&serv_addr.sin_addr);
//serv_addr.sin_addr.s_addr = inet_addr(serv_host_addr);
serv_addr.sin_port = htons(SERV_UDP_PORT);
非常感谢您提前。