【问题标题】:client and server example not working客户端和服务器示例不起作用
【发布时间】:2012-04-21 17:49:53
【问题描述】:

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

之前在 client.cpp 中,我使用了 fgets(clibuff, 100, stdin) 并将它和 write(sockcli, clibuff, strlen(clibuff)) 放在无限 for 循环中,但这不起作用...

所以我决定让它只适用于一个语句并删除了 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 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;

我做错了什么?

【问题讨论】:

  • 请在您的问题中内联发布代码的相关部分。没有它,一旦该链接失效,您的问题对任何人的价值都是 0。
  • @Mat + 1 '因为我将你的评论附加到我的评论中,试图让它发生。
  • 添加 fflush(stdout);在 fputs() 到它之后

标签: c++ network-programming socket.io


【解决方案1】:

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

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

阅读accept()。

【讨论】:

  • 好吧,我将 read() 中的 sockfd1 更改为 connfd 并在 accept() 函数之后使用了 fork() ......仍然服务器不输出我的输入
  • accept() 是否在客户端连接时返回?当你在下一行设置断点时会发生什么?另外,请在您的问题中内联发布代码的相关部分。没有它,一旦该链接失效,您的问题对任何人的价值都是 0。
  • 是的,accept 返回一个非负数?...代码在你的机器上工作吗?
猜你喜欢
  • 2019-01-08
  • 2012-11-11
  • 2011-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 2019-12-29
相关资源
最近更新 更多