gpt4 book ai didi

c - 在 TCP/IP echo 服务器中的三个远程终端上打印

转载 作者:行者123 更新时间:2023-11-30 17:42:39 24 4
gpt4 key购买 nike

我有一个回显服务器和三个客户端,我需要的是每个客户端都可以向服务器发送数据,并且每个数据都可以在服务器的三个不同终端中打印。

我想知道这是否可行,以及我需要使用哪些附加功能才能做到这一点。我只需要了解我可以使用哪些元素来获得我想要的东西。

我正在使用 C 语言,并且有四台装有 CentOS 的计算机。这是我的两个程序的代码(我省略了错误处理代码):

客户端程序:

int main(int argc, char *argv[])
{
int clientSocket,remotePort,status=0;
struct sockaddr_in ServerName={0};
char buffer[256]="";
char *remoteHost=NULL;
remoteHost=argv[1];
remotePort=atoi(argv[2]);
clientSocket= socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
ServerName.sin_family=AF_INET;
ServerName.sin_port=htons(remotePort);
ServerName.sin_addr.s_addr=inet_addr=(remoteHost);
status=connect(clientSocket,(struct sockaddr *)&ServerName,sizeof(ServerName));
while(strcmp(buffer,"exit"))
{
scanf("%s",buffer);
write(clientSocket,buffer,strlen(buffer));
read(clientSocket,buffer,sizeof(buffer));
printf("%s\n",buffer);
}
}

服务器程序:

#define BACK_LOG 5
int main(int argc, char *argv[])
{
int serverSocket=0,status=0,clientSocket=0,longitud=0,port;
char buffer[256]="";
struct sockaddr_in serverName,clientName;
buffer[0]='\0';
port=atoi(argv[1]);
serverSocket=socket(AF_INET,SOCK_STREAM,0);
serverName.sin_family=AF_INET;
serverName.sin_port=htons(port);
serverName.sin_addr.s_addr=htonl(INADDR_ANY);
status=bind(serverSocket,(struct sockaddr *)&serverName, sizeof(serverName));
status=listen(serverSocket,BACK_LOG);
int clientLength = sizeof(clientName);
clientSocket=accept(serverSocket,(struct sockaddr *)&clientName, &clientLength);
while(read(clientSocket,buffer,sizeof(buffer))!=0)
{
longitud=strlen(buffer);
printf("%s %i\n",buffer,strlen(buffer));
write(clientSocket,buffer,longitud);
strncpy(buffer,buffer,longitud+1);
}
close(serverSocket);
}

最佳答案

我发现了两个选项:使用 select 和使用带有 pthread 的线程,是处理 echo 服务器中的多个连接的好方法。 – 理查德

关于c - 在 TCP/IP echo 服务器中的三个远程终端上打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20462199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com