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

时间:2012-04-21 17:49:54

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

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

早先在client.cpp中,我曾经使用过fgets(clibuff,100,stdin)并且已经把这个和写(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;

我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

'connfd'是新连接客户端的服务器&lt;&gt;客户端套接字 - 它是您应该在其上读取/写入该客户端的套接字。创建一个以'connfd'作为参数的新线程是很常见的,这样每个客户端都可以独立处理。

阅读accept()。