客户端和服务器示例不起作用

client and server example not working

本文关键字:不起作用 服务器 客户端      更新时间:2023-10-16

我正在学习套接字编程...我试图创建一个程序,在其中我在客户端屏幕上输入一个句子,然后将其传输到服务器,然后它出现在运行服务器的终端上......代码在这里.....(在看到这个问题的第一个答案后,我意识到了我的错误,并将 read() 函数中的 sockfd1 更改为 connfd,并在服务器.cpp的 accept() 之后使用了 fork() ...但程序仍然不起作用)

在客户端.cpp的早期,我使用了fgets(clibuff,100,stdin),并将这个和write(sockcli,clibuff,strlen(clibuff))放在一个无限的for循环中,但这不起作用...

所以我决定让它只适用于一个语句并删除了 for 循环......但这也行不通...

当我在两个单独的命令行上运行它们时,它们都启动正常(因为两个程序的 x 都输出 0)...但是当我在客户端键入任何内容并按回车键时...它不会出现在服务器窗口中...代码的相关部分是:

-------server.cpp-----
int sockfd1;
sockfd1=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
int x=bind(sockfd1, (sockaddr*)(&serv), sizeof(serv)); //serv is my sockaddr_in structure
cout<<x<<endl;
listen(sockfd1,5);
listen(sockfd1,5);
int y;
for(;;)
{
connfd=accept(sockfd1, &cliaddr, &siz);     
if((y=read(sockfd1, servbuff, 100))>0) //i changed sockfd1 here to connfd
fputs(servbuff, stdout);
}

-----client.cpp------
char clibuff[100];
char line[100];
sockaddr_in cli;
bzero(&cli, sizeof(cli));
cli.sin_family=AF_INET;
inet_aton("127.0.0.1", &(cli.sin_addr));
cli.sin_port=htons(2289);
int sockcli;
sockcli=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
int x= connect(sockcli,(sockaddr*)&cli, sizeof(cli));
cout<<x<<endl;
cin>>clibuff;
write(sockcli, clibuff, strlen(clibuff));
return 0;

我做错了什么?

您正在从侦听套接字读取。 你不应该那样做。

"Connfd"是新连接的客户端的服务器<>客户端套接字 - 它是您应该在该客户端上读取/写入的套接字。 通常使用"connfd"作为参数创建新线程,以便可以独立处理每个客户端。

阅读 accept()。