客户端和服务器示例不工作

问题描述:

我正在学习套接字编程...我试图创建一个程序,在该程序中,我在客户端屏幕上输入了一个句子,并将其传输到服务器,然后出现在终端上服务器正在运行....代码是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; 

我到底做错了什么?

+2

请在您的问题中内嵌您的代码的相关部分。没有这一点,只要该链接失效,你的问题对任何人都有价值。 – Mat 2012-04-21 17:55:00

+0

@Mat + 1'cos我附上你的评论给我的尝试,让它发生。 – 2012-04-21 18:30:26

+1

加fflush(stdout);后fputs()它 – Corwin 2012-04-22 19:35:21

您正在监听套接字。你不应该那样做。

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

阅读接受()。

+0

以及我改变sockfd1里面的read()以connfd和也使用后()accept()函数...()仍然服务器不输出我的输入 – avinash 2012-04-21 18:20:37

+0

accept()返回客户端连接吗?当你在下一行放置一个断点时会发生什么?此外,请在您的问题中内嵌您的代码的相关部分。没有这一点,只要该链接失效,你的问题对任何人都有价值。 – 2012-04-21 18:29:18

+0

是接受返回一个非负数?...是在您的机器上工作的代码? – avinash 2012-04-22 05:03:50