当前位置: 技术问答>linux和unix
高手帮忙啊:困惑了一个下午了:(....
来源: 互联网 发布时间:2015-09-10
本文导语: 高手帮忙啊:困惑了一个下午了:(.... 我编了一个客户服务聊天程序(一个客户端程序,一个服务器程序),服务器程序运行后,监听来自客户的连接.首先我在同一台电脑上实验,客户端输入127.0.0.1,就可以和服务端程序收发消息了. 然后...
高手帮忙啊:困惑了一个下午了:(....
我编了一个客户服务聊天程序(一个客户端程序,一个服务器程序),服务器程序运行后,监听来自客户的连接.首先我在同一台电脑上实验,客户端输入127.0.0.1,就可以和服务端程序收发消息了.
然后我在两台电脑上实验.两台电脑连接情况这样:
1.都是linux平台各有一个网卡,用一根网线连接起来,并设定静态IP,然后在各自机子终端,ping对方IP,显示连接成功,然后我把服务程序放到另一台B电脑上,让它监听,我在A电脑上运行客户程序,同时输入对方B的IP,但连接不成功.
显示: error to connect server!
连接代码这样:
char sIP[] = "192.168.1.100";
if((host = gethostbyname(sIP))==NULL)//也可指定其他IP
{
printf("error to client gethostbyname");
exit(1);
}
//初始化socket
conn_fd = socket(AF_INET,SOCK_STREAM,0);
memset(&serv_addr,0,sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(SERVER_PORT);
serv_addr.sin_addr=*((struct in_addr*)host->h_addr);
//连接服务器
if((ret = connect(conn_fd,(struct sockaddr*)&serv_addr,
sizeof(struct sockaddr))) == -1)
{
printf("error to connect server!n");
exit(1);
}
|
用netstat看一下是不是所有的IP上的你指定的端口都监听了
把那个serv_addr.sin_addr换成INETADDR_ANY试试看,怀疑你监听的IP地址仅仅是lo的
把那个serv_addr.sin_addr换成INETADDR_ANY试试看,怀疑你监听的IP地址仅仅是lo的
|
我有一次原来编译通过运行正常的服务器端程序,突然有一天罢工了,找来找去最后的原因是改了IP地址后/dev/hosts文件里相应的IP没改过来,导致在绑定的时候对不上号。
|
有可能是因为服务程序所在的电脑上有防火墙之类的东东。