我正在尝试使用多进程应用程序中的套接字为家庭作业创建令牌环网络。 当我在相同端口上调用两次或更多次应用程序时,我发现错误是在绑定函数中,当我尝试连接到服务器时,我在连接函数中出错。
服务器进程必须连接到下一个服务器并从预先服务器(令牌环网络)中检索信息。
这是我的错误代码。
int main(int argc, char *argv[]){
"GET FROM ARGV,
int port: a port to connect"
char *ip: ip address for the client to connect a server.
int port_sux=a port to connect the client to server.
"
pid_t pid;
pid=fork();
if(pid==0){ //PROCESS SERVER.
char string[100];
int sd_server=crea_socket(porta);
while(1){
sd_client=accept(sd_server, NULL, NULL);
read(sd_client, string, 100);
write(STDOUT_FILENO, string, strlen(string));
close(sd_client);
}
close(sd_server);
exit(-1);
}
else{ //PROCESS CLIENT.
int sd_out=connetti_stazione(ip, porta_sux);
write(sd_out, "client connesso", strlen("client connesso"));
}
return (0);
}
int crea_socket(int porta){
int sd;
struct sockaddr_in add;
add.sin_family=AF_INET;
add.sin_port=htons(porta);
add.sin_addr.s_addr=htonl(INADDR_ANY);
socket(PF_INET, SOCK_STREAM, 0);
bind(sd, (struct sockaddr *)&add, sizeof(add))
listen(sd, 1)<0){perror("\nErrore Listen."), exit(1);
}
int connetti_stazione(char *ip, int porta){
int sd;
struct sockaddr_in add_c;
add_c.sin_family=AF_INET;
add_c.sin_port=htons(porta);
inet_aton(ip, &add_c.sin_addr);
socket(PF_INET, SOCK_STREAM, 0);
if(connect(sd, (struct sockaddr *)&add_c, sizeof(add_c))<0)
{
perror("\nErrore connect."), exit(1);
}
return(sd);
}