我想为 unix 制作一个简单的聊天应用程序。我创建了一台支持多个客户端的服务器。每当有新客户端连接到服务器时,就会使用 fork 命令创建一个新进程。现在的问题是所有子进程在服务器上共享相同的标准输入,因此为了向第二个客户发送消息,第一个子进程必须终止。为了解决这个问题,我想在新终端中运行每个子进程。这可以通过在新文件中编写子进程代码的代码并像 xterm -e sh -c 一样执行它来实现。(虽然我没有尝试过)。
我真正想要的不是有两个文件只是为了启动一个新终端并运行其中的其余代码。
int say(int socket)
{
char *s;
fscanf(stdin,"%79s",s);
int result=send(socket,s,strlen(s),0);
return result;
}
int main()
{
int listener_d;
struct sockaddr_in name;
listener_d=socket(PF_INET,SOCK_STREAM,0);
name.sin_family=PF_INET;
name.sin_port=(in_port_t)htons(30000);
name.sin_addr.s_addr=htonl(INADDR_ANY);
int c = bind(listener_d,(struct sockaddr *)&name,sizeof(name)); //Bind
if(c== -1)
{
printf("\nCan't bind to socket\n");
}
if(listen(listener_d,10) == -1) // Listen
{
printf("\nCan't listen\n");
}
puts("\nWait for connection\n");
while(1)
{
struct sockaddr_storage client_addr;
unsigned int address_size = sizeof(client_addr);
int connect_d = accept(listener_d,
(struct sockaddr*)&client_addr,&address_size); //Accept
if(connect_d== -1)
{
printf("\nCan't open secondary socket\n");
}
if(!fork())
{
close(listener_d);
char *msg = "welcome Sweetone\n";
if(send(connect_d,msg,strlen(msg),0))
{
printf("send");
}
int k=0;
while(k<5)
{
say(connect_d);
++k;
}
close(connect_d);
exit(0);
}
close(connect_d);
}
close(listener_d);
return 0;
}