当前位置: 技术问答>linux和unix
socket通信问题
来源: 互联网 发布时间:2017-02-22
本文导语: 本帖最后由 complety 于 2012-05-14 19:54:30 编辑 在虚拟机下的fedora里面写了个server和client程序。 测试正常。现在想测试下怎么让网络上的client找到server。 然后向server发送信息。防火墙都关闭了。 虚拟机联网方式是nat。服...
测试正常。现在想测试下怎么让网络上的client找到server。
然后向server发送信息。防火墙都关闭了。
虚拟机联网方式是nat。服务都开了。虚拟机里面的可以ping通
各个网站。现在就在怎么让client连接服务器了。求教育啊
server.c
#include
#include
#include
#include
#include
#include
#define MAX 100
void deal(char *src)
{
if (src == NULL)
return ;
for (; *src != ''; src++){
if (*src >= 'A' && *src 1){
str = argv[1];
}
bzero(&sin, sizeof(sin));
sin.sin_family = AF_INET;
inet_pton(AF_INET, "192.168.1.1", &sin.sin_addr);
//问题就在这里。当我把这个ip改为自己的网络ip,然后把客户端
//放到网络上的另一台主机上。让它来连接服务器。但是没反应
//不知道为啥
//这里的ip应该为服务器的网络ip。但没写上去。就写了个私有ip
sin.sin_port = htons(port);//和服务器同样的端口号
sockfd = socket(AF_INET, SOCK_STREAM, 0);
connect(sockfd, (struct sockaddr *)&sin, sizeof(sin));
//主动连接服务器
write(sockfd, str, strlen(str) + 1);
//该串不包括''
//读取服务器程序发回的串,由于是同一台机器,不存在延时
//真正的网络环境,要处理延时
read(sockfd, buf, MAX);
printf("recive form server : %sn", buf);
close(sockfd);
exit(0);
}
|
NAT只能帮助你的虚拟机LINUX上外网,局域网内其他机器和外网是无法主动连接你的,因为虚拟机根本不会把局域网机器发来的包NAT到你的虚拟机。
只有你的虚拟机主动连接外网的时候才会被NAT映射,所以楼主放弃吧。 我从没用过虚拟机软件设置NAT规则,里边有个PORT FORWARDING,也没看懂是不是修改NAT映射的地方,如果可以的话你就可以修改NAT规则,将流量以太网卡的XXX端口的包NAT到虚拟机网卡。
只有你的虚拟机主动连接外网的时候才会被NAT映射,所以楼主放弃吧。 我从没用过虚拟机软件设置NAT规则,里边有个PORT FORWARDING,也没看懂是不是修改NAT映射的地方,如果可以的话你就可以修改NAT规则,将流量以太网卡的XXX端口的包NAT到虚拟机网卡。