我正在学习套接字编程...我试图创建一个程序,在该程序中我在客户端屏幕上输入一个句子,然后将其传输到服务器,然后出现在运行服务器的终端上...代码是here .....(看到此问题的第一个答案后,我意识到了我的错误,并将read()函数中的 sockfd1更改为connfd ,并在server.cpp中的accept()之后使用了 fork()。 。但仍然编不起作用)在client.cpp的早期版本中,我使用了fgets(clibuff,100,stdin)并将其写入并在一个无限for循环中写入(sockcli,clibuff,strlen(clibuff)),但这没有用...所以我决定让它只对一条语句起作用,并删除了for循环....但是这也行不通...当我在两个单独的命令行上运行它们时,它们都可以正常运行(因为两个程序的x都输出0)...但是当我在客户端键入任何内容并按Enter时, ...它不会出现在服务器窗口中 ...代码的相关部分是:-------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 structurecout<<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 connfdfputs(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”是新连接的客户端的server 客户端套接字-它是您应该在其上读取/写入该客户端的套接字。通常以“connfd”为参数创建一个新线程,以便可以独立处理每个客户端。阅读accept()。
10-02 06:20