【发布时间】:2018-06-27 09:19:10
【问题描述】:
我试图用 c++ 语言创建一个 TCP 服务器-客户端聊天程序,但在客户端连接中,连接功能不起作用,我的连接正在终止。我尝试了 setsockopt 方法以及更改端口号,但是没有任何效果。请帮帮我! 这是客户端:
#include <iostream>
#include <bits/stdc++.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <unistd.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
#define IP "10.31.10.157"
int main()
{
int port=80;
int buffersize= 1024;
char buffer[buffersize];
int client,server;
sockaddr_in server_addr;
client=socket(AF_INET,SOCK_STREAM,0);
if(client<0)
{
cout<<"Error creating socket "<<endl;
exit(1);
}
cout<<"Client Socket Created ";
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr= inet_addr(IP);
//server_addr.sin_addr.s_addr= inet_addr(INADDR_ANY);
server_addr.sin_port=htons(port);
if(connect(client,(struct sockaddr *) &server_addr, sizeof(server_addr))>0)
{
cout<<"\nWrite Bye to end connection\n";
while(1)
{
cout<<"Server: ";
recv(client,buffer,buffersize,0);
printf("%s\n",buffer);
cout<<"Client: ";
gets(buffer);
send(client,buffer,buffersize,0);
if(strcmp(buffer,"Bye")==0)
break;
}
}
else
cout<<"Connection Failed";
cout<<"Connection terminated \n";
//close(client);
}
服务器端:
#include <iostream>
#include <bits/stdc++.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
int main()
{
int server,client;
int buffersize=1024;
char buffer[buffersize];
int portNum=80;
struct sockaddr_in server_addr;
socklen_t size;
client=socket(AF_INET,SOCK_STREAM,0);
if(client<0)
{
cout<<"Error establishing connection "<<endl;
return 0;
}
cout<<"Socket connection established \n";
server_addr.sin_family= AF_INET;
server_addr.sin_addr.s_addr= htons(INADDR_ANY);
server_addr.sin_port= htons(portNum);
if(bind(client, (struct sockaddr *) &server_addr, sizeof(server_addr))<0)
{
cout<<"Error binding socket "<<endl;
return 0;
}
size= sizeof(server_addr);
cout<<"Looking for clients";
listen(client,1);
server= accept(client, (struct sockaddr *)&server_addr, &size);
if(server<0)
{
cout<<"Error on accepting"<<endl;
return 0;
}
if(server>0)
{
cout<<"\nType Bye to end connection\n";
while(1)
{
cout<<"Server: ";
gets(buffer);
send(server,buffer,buffersize,0);
recv(server,buffer,buffersize,0);
cout<<"Client: ";
printf("%s",buffer);
cout<<"\n";
if(strcmp(buffer,"Bye")==0)
break;
}
}
cout<<"Connection terminated ";
//close(client);
}
服务器程序运行正常,但客户端没有连接到服务器!!
【问题讨论】:
-
尝试隔离问题并发布错误消息或日志,不要发布一大堆代码要求其他人修复它,请具体说明:)
-
1.为什么不使用
errno和strerror找出问题所在? 2. 你有没有在你的服务器端口上尝试过 telnet,它有效吗? 3.inet_addr已弃用,请使用getaddrinfo。 4. 考虑使用 Asio 作为更便携的网络层 -
您以什么顺序运行客户端和服务器?如果没有服务器监听,客户端将无法连接。并不是说这是问题所在,但可能值得一看。
标签: c++ networking tcp chat tcpclient