问一个有关socket中指定IP地址的问题

halo126 2010-05-17 04:35:38
服务器端bind的是本机IP
客户端connect的是服务器的IP

想问一下这两个IP都是广域网上的IP吗?
如果客户端在局域网内,服务器在广域网内,IP应该怎么设?

像qq那样的C/S系统,IP是怎么设的?

因为我发现局域网内既有局域网内的IP,也有广域网内的IP,这两个什么关系?初学!搞不清!望大虾指点!

...全文
649 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
turtle_2 2012-02-14
  • 打赏
  • 举报
回复
好文,太感谢各位了!
TRUE 2010-05-18
  • 打赏
  • 举报
回复
1、2个都在内网,ok,只要ping的通,链接没有问题,你只要指定链接的IP和端口即可
2、2个都在公网,也没有问题,只要IP地址互通,就没有问题,和内网一样
3、客户端在内网,服务器在公网,这样也没有问题,直接链接即可
4、客户端在公网,服务器在内网,你需要使用端口映射等来把端口和你的内网的IP进行绑定,路由器或者一些防火墙都可以实现,但是这个路由器或者防火墙需要公网IP。然后你对这个公网的IP和端口的链接都可以映射到你的内网的服务器上。当然这个时候的IP地址和端口不是你的真实的内网的机器的端口和IP,而是你的路由器或者防火墙的IP和端口。不知道明白吗
Eleven 2010-05-17
  • 打赏
  • 举报
回复
贴一个:
内网:就象你小时候,什么事都有爸妈顶这,爸妈做主,都要通过爸妈。没有身份证。
外网:就象你张大了,什么事都可以自己做主了。有身份证了,要自己承担法律责任了。
------------------------------------------------
内网也就是局域网,最直观的就是像网吧,公司内部的电脑用交换机,HUB,路由连起来的。再通过光钎。猫接入INTERNET的。
外网就像你家里的一台电脑。用猫拨号上的,有个外部IP的。
----------------------------------------------------------------
什么是内网、公网
内网、公网是两种Internet的接入方式。
内网接入方式:上网的计算机得到的IP地址是Inetnet上的保留地址,保留地址有如下3种形式:
10.x.x.x
172.16.x.x至172.31.x.x
192.168.x.x
内网的计算机以NAT(网络地址转换)协议,通过一个公共的网关访问Internet。
内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。
公网接入方式:上网的计算机得到的IP地址是Inetnet上的非保留地址。公网的计算机和Internet上的其他计算机可随意互相访问。
向立天 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sjdev 的回复:]
坐看黑暗伯爵,(*^__^*) 嘻嘻……。
[/Quote]
呵呵
sjdev 2010-05-17
  • 打赏
  • 举报
回复
坐看黑暗伯爵,(*^__^*) 嘻嘻……。
快乐鹦鹉 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 halo126 的回复:]
具体怎么实现啊?有代码看看嘛?
想不出怎么实现
[/Quote]
你要实现什么啊?说了这些和你的程序没有关系。通信程序不需要关心这些。正如不需要关心底层的通信协议一样,对你来说都是透明的,也不是用编码来实现的。
halo126 2010-05-17
  • 打赏
  • 举报
回复
具体怎么实现啊?有代码看看嘛?
想不出怎么实现
sanguomi 2010-05-17
  • 打赏
  • 举报
回复
如果你是那种几十万的客户端软件,你都去做端口映射??
快乐鹦鹉 2010-05-17
  • 打赏
  • 举报
回复
端口映射实现方式也不管你是,对程序来说也是透明的。
上面已经说了,确定服务器端是否可以连通,只需要在客户端ping ip地址就行嘞
halo126 2010-05-17
  • 打赏
  • 举报
回复
楼上
我只要知道端口映射实现方法就可以了?
快乐鹦鹉 2010-05-17
  • 打赏
  • 举报
回复
NAT穿透不是你程序解决的事情,这个不需要关心。
你理解的不大对,NAT穿透对你的通信程序来说是透明的。你只需关心能够访问到服务器的IP地址,即可确认是否可以通信。
如果你的服务器是局域网中的一台计算机,那么在网络服务器上也可以用端口映射的方法将这台服务器让外部的计算机能够访问到。
halo126 2010-05-17
  • 打赏
  • 举报
回复
happyparrot:是这样吗?
可以直接写入IP的情况:
客户端和服务器端在同一局域网内、服务器端在广域网内(包括客户端在局域网和客户端在广域网)

直接bind不支持,需要做NAT穿透:
客户端和服务器端在两个局域网内、客户端在广域网服务器在局域网
halo126 2010-05-17
  • 打赏
  • 举报
回复
NAT穿透看什么材料比较好?
搜了一下都感觉很抽象
GeorgeSoros 2010-05-17
  • 打赏
  • 举报
回复
不好意思了,没积分了
sanguomi 2010-05-17
  • 打赏
  • 举报
回复
都不是公网IP,都是局域网IP
要连接公网 要做NAT穿透,首先都必须内网去连接公网IP,NAT会给你分配IP和PORT,然后看不同的NAT类型,有的服务端收到后,可以回包过来,有的不行
QQ那样的,都需要服务端做中端,有可能有几层在做中转,
快乐鹦鹉 2010-05-17
  • 打赏
  • 举报
回复
局域网中不是所有机器都有外网IP,也只有服务器有。其它机器都是内网IP,通过服务器上网。

如果客户端在局域网内,服务器在广域网内,IP应该怎么设?
==只要服务器在广域网就够了。然后客户端局域网能够连接广域网即可(也就是所谓的上网)
尹成 2010-05-17
  • 打赏
  • 举报
回复
要通信就必须要有公网IP和端口,有下面几个方法
其中一台的局域网路由器做一个端口映射,相当于一台机器开放一个公网IP下的端口。

思路如下:
A->B打洞过程:

说明:
A:用户A
B:用户B
NA:NAT网络A
NB:NAT网络B
Server C为外网的机器(服务器或消息中转站)

A想与B建立通信通道,A to B打洞:
1.A ---> NA ---> Server C ---> NB ---> B
2.B---->A (打洞完成)

1,如果A想与B通信;
2,A首先连接 C, C得到A的外网NA的地址和端口;
3,B也要连接C,C得到B的外网NB的地址和端口;
4,A告诉C说我要和B通讯;
5,C通过NB发信息给B,告诉B A的外网NA的地址和端口;
6,B向NA发数据包(肯定会被NA丢弃,因为NA上并没有 A->NB 的合法session),
但是NB上就建立了有B->NA的合法session了;
7,B发数据包给C,让 C 通知 A,我已经把洞打好了;
8,A接受到通知后向 B 的外网发NB数据包,这样就不会被丢弃掉了。因为对于NB来说,它看到的是A的外网NA的地址,
而通过第6步,B已经让NA成为NB的合法通信对象了。所以当NA发数据包给NB时,NB就会接收并转发给B;
快乐鹦鹉 2010-05-17
  • 打赏
  • 举报
回复
首先QQ公司有服务器,在公网有IP地址,那么每个客户端都连这个IP地址,然后服务端再帮你接通目的客户端就可以了。

18,356

社区成员

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

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