客户端和服务器示例不工作
问题描述:
我正在学习套接字编程...我试图创建一个程序,在该程序中,我在客户端屏幕上输入了一个句子,并将其传输到服务器,然后出现在终端上服务器正在运行....代码是here .....(看到这个问题的第一个答案后,我意识到我的错误,并改变了sockfd1在read()函数中,以接受并使用了fork() ()在server.cpp中...但仍编无效)客户端和服务器示例不工作
在client.cpp早些时候,我用fgets(clibuff,100,标准输入),并把这个和写(sockcli,clibuff, strlen(clibuff))在一个无限循环中,但没有奏效...
,所以我决定把它只是一个语句工作,除去在for循环....但是这也没有工作...
当我在两个不同的命令行运行这些他们都开始罚款(因为两个程序输出0 x)...但当我在客户端输入任何东西,然后按回车...它不会出现在服务器窗口 ...代码的相关部分是:
-------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'作为参数创建一个新线程,以便每个客户端都可以独立处理。
阅读接受()。
请在您的问题中内嵌您的代码的相关部分。没有这一点,只要该链接失效,你的问题对任何人都有价值。 – Mat 2012-04-21 17:55:00
@Mat + 1'cos我附上你的评论给我的尝试,让它发生。 – 2012-04-21 18:30:26
加fflush(stdout);后fputs()它 – Corwin 2012-04-22 19:35:21