写了一个socket通信程序(两台电脑连接总是不成功,自己电脑上可以,求解释,求详细指出问题所在)

Ginsmile1224830613 2015-05-26 11:55:38
Socket Client和Server在自己电脑上都能连接成功,但换成两台电脑就连不上了:
代码:
Client:


#include <winsock2.h>
#include <iostream>
using namespace std;
int main()
{
WSADATA wsaData;
SOCKET client;
SOCKADDR_IN addr ;
char buf[128];
if(WSAStartup(0x202,&wsaData)!=0)
{
cout<<"initiate Winsock DLL erro"<<endl;
return -1;
}
client=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
cout<<"Server IP:";
cin.getline(buf,128,'\n');
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=inet_addr(buf);
addr.sin_port=htons(6666);
if(connect(client,(SOCKADDR*)&addr,sizeof(addr))==SOCKET_ERROR)
{
cout<<"connect failed"<<WSAGetLastError()<<endl;
WSACleanup();
return -1;


}
else cout<<"连接成功"<<endl;


while(1)
{
cin.getline(buf,128,'\n');
if (strcmp(buf,"quit")==0) break;
send(client,buf,sizeof(buf),0);
if(recv(client,buf,sizeof(buf),0)>0)
{
cout<<buf<<endl;
memset(buf,0,128);
}
}


closesocket(client);
WSACleanup();
return 0;


}



Server:
#include <iostream>
#include <winsock2.h>
using namespace std;
int main()
{
WSADATA wsaData;
PHOSTENT hostinfo;
SOCKET server,accSock;
SOCKADDR_IN addr,addrout;
int port,len=sizeof( SOCKADDR);
char buf[128],*ip;
if (WSAStartup(0x202,&wsaData)!=0)
{
cout<<"error"<<endl;
return -1;
}
server=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
addr.sin_family=AF_INET;
addr.sin_addr.s_addr= htonl(INADDR_ANY);
addr.sin_port=htons(6666);
bind(server,(SOCKADDR*)&addr,sizeof(addr));
gethostname(buf,sizeof(buf));
hostinfo=gethostbyname(buf);
ip=inet_ntoa(*(IN_ADDR*)*hostinfo->h_addr_list);
listen(server,1);
cout<<"接收端:"<<ip<<"等待连接"<<endl;
accSock=accept(server,(SOCKADDR*)&addrout,&len);
ip=inet_ntoa(addrout.sin_addr);
port=htons(addrout.sin_port);
cout<<"发送端:"<<ip<<":"<<port<<endl;




while(1)
{int flag=0;
flag=recv(accSock,buf,sizeof(buf),0);
if(flag>0)
{
cout<<buf<<endl;
cin.getline(buf,128);
send(accSock,buf,sizeof(buf),0);
memset(buf,0,128);
}


if (strcmp(buf,"quit")==0) break;




}
closesocket(accSock);
closesocket(server);
WSACleanup();


return 0;


}
...全文
6681 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨笨仔 2016-07-27
  • 打赏
  • 举报
回复
引用 13 楼 xiaoruoling 的回复:
[quote=引用 12 楼 wxhxj0268 的回复:] [quote=引用 楼主 Ginsmile1224830613 的回复:] Socket Client和Server在自己电脑上都能连接成功,但换成两台电脑就连不上了:
自己电脑连接与两台电脑连接最大的区别就是IP不同,本机为127.0.0.1,而我很好奇,你两机之间的IP是如何设置的?[/quote] 那如果是两台电脑之间,IP如何设置呢?[/quote] 先检查确定网络环境,两台电脑是否在一个网段,电脑的本地策略是否设置了访问许可等。
sevancheng 2016-07-19
  • 打赏
  • 举报
回复
addr.sin_family=AF_INET; addr.sin_addr.s_addr=inet_addr(buf); addr.sin_port=htons(6666); if(connect(client,(SOCKADDR*)&addr,sizeof(addr))==SOCKET_ERROR) 单步调试,检查服务端IP地址,检查防火墙设置
灵仔仔 2016-07-17
  • 打赏
  • 举报
回复
引用 12 楼 wxhxj0268 的回复:
[quote=引用 楼主 Ginsmile1224830613 的回复:] Socket Client和Server在自己电脑上都能连接成功,但换成两台电脑就连不上了:
自己电脑连接与两台电脑连接最大的区别就是IP不同,本机为127.0.0.1,而我很好奇,你两机之间的IP是如何设置的?[/quote] 那如果是两台电脑之间,IP如何设置呢?
笨笨仔 2015-12-28
  • 打赏
  • 举报
回复
引用 楼主 Ginsmile1224830613 的回复:
Socket Client和Server在自己电脑上都能连接成功,但换成两台电脑就连不上了:
自己电脑连接与两台电脑连接最大的区别就是IP不同,本机为127.0.0.1,而我很好奇,你两机之间的IP是如何设置的?
qq_33528340 2015-12-27
  • 打赏
  • 举报
回复
楼主为什么我用你的通信不了 马上要交作业了 能办我看看嘛 我QQ1269766840 求啊
小小爬虾 2015-07-09
  • 打赏
  • 举报
回复
引用 7 楼 u011673029 的回复:
你的ip有问题,你在client写的关于ip的函数感觉是获得客户端本机的ip地址,不是获得服务器的地址,所以你在同一台机器上没问题,在两台机器上有问题
没有吧 他是要输入服务器的IP地址的。 估计防火墙的原因最大。本机电脑怎么搞都行,别人哪能随便搞。
瀚海一漂 2015-07-02
  • 打赏
  • 举报
回复
1.试试看ip能不能ping通 2.connect返回错误,使用GetWSALastError返回错误码看下。
阿源是少年 2015-07-01
  • 打赏
  • 举报
回复 1
两台电脑如果是在同一局域网内,关闭防火墙即可,如果是公网,需要做端口映射
自在飞花6541 2015-06-29
  • 打赏
  • 举报
回复
你的ip有问题,你在client写的关于ip的函数感觉是获得客户端本机的ip地址,不是获得服务器的地址,所以你在同一台机器上没问题,在两台机器上有问题
飞翔798 2015-05-27
  • 打赏
  • 举报
回复
看看客户端iP设置是否正确
Eleven 2015-05-27
  • 打赏
  • 举报
回复
connect连接失败,请查看一下WSAGetLastError()的返回值是什么。
danscort2000 2015-05-27
  • 打赏
  • 举报
回复
防火墙设置!!!
zgl7903 2015-05-27
  • 打赏
  • 举报
回复
如果 Server 和 Client 不是在同一个网段的局域网内,可能需要填外网IP 而且要服务端的端口可被访问到
xian_wwq 2015-05-27
  • 打赏
  • 举报
回复
客户端connect后错误码多少? 10054 ? 10061? 先查网络是否正常,再查防火墙
oyljerry 2015-05-27
  • 打赏
  • 举报
回复
一个局域网通信的话,那么就要看具体的错误信息,是否机器上有防火墙等拦截处理

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧