Socket 基本概念

每日一囧:思念不能自己,痛苦不能自理,结果不能自取,幸福不能自予。

1.名词相关

2.套接字基本信息

 

======================  华丽丽的分割线  ======================

 

1.名词相关

 

1.1 关于地址

  一个程序要与另一个程序通信,就要给网络提供足够的信息,使其能找到另一个程序。在TCP/IP协议中,有两部分信息用来定位一个指定的程序(注意,这里说的不是机子而是程序):互联网地址(Internet address)和端口号(port number)。其中互联网地址由IP协议使用,而附加的端口号地址信息由传输协议使用(TCP/IP协议)解析。

  每个互联网地址代表了一台主机与底层的通信信道的连接,也就是一个网络接口(network interface),主机可以有多个网络接口(这个在上许毅老师的信息安全课上有玩过)。每个这样的连接都属于唯一的一台主机,所以只要它连接到网络,就可以通过一个互联网地址定位这主机。每台主机可以有多个接口,每个接口又可以有多个地址(如一个接口同时拥有IPV4和IPV6地址)。通过IP协议可以确定主机,但这样还不够,还得知道是该主机中的哪个程序需要这些信息。就好比确认了某个住宅区中的某栋大楼,光这样不够,还得确定是哪个房间。或者好比打电话到一家公司,还得确定要接到那个分机一样。端口号就相当于房间号或分机号,通过它可以知道是那个应用程序。端口号的范围是1-65535(0被保留)。

  IP协议有定义一些特殊的地址,如:127.0.0.1(loopback address)。该地址总是被分配给一个特殊的回环接口(loopback interface)。回环接口的功能只是简单的将发送给它的报文信息直接回发给发送者。可以用它来模拟测试。

  另一些特殊的地址为私有用途的地址,如:192.168开头的地址。不叙述也不知道该怎么叙述,没了解深入,在宿舍用路由免不了分配它。

  还有一类特殊的地址,由多播(multicast)地址组成。暂时不了解,等以后补充。

  

1.2 关于名字(域名)

  一般来说,我们很少直接通过IP访问,我们更多通过一个名字(域名)来访问,如: http://www.cnblogs.com/loveis

  这样的好处有二:1.容易记住。2.IP不够用,经常更换,而名字不换。而之所以能够这样,是因为有域名系统(Domain Name System,DNS)或本地配置数据库(信息安全课有教过,但现在想不起来在机子上的哪里,悲剧!哎,以前没写博客的习惯,失败!)

  

1.3 关于套接字(Socket)

  Socket(套接字)是一种抽象层,应用层序通过它来发送接收数据。每个使用特定套接字的程序都可以通过那个套接字进行通信。如前所说,每个端口都标识了一台主机上的一个应用程序。实际上,一个端口确定了一台主机上的一个套接字。主机中的多个程序可以同时访问同一个套接字。在实际应用中,访问相同的套接字的不同程序一般属于同一个应用。

  

======================  华丽丽的分割线  ======================

  

2.套接字基本信息

 

2.1 套接字地址信息

  一个客户端要发起一次通信,必然得知道服务端的主机IP地址。

  在Java 中,地址可以是数字类型的字符串(127.0.0.1),也可以是主机名。当然,主机名必须被解析成数字才行。

  InterAddress类代表了一个网络目标地址。包括主机名和地址信息。该类的实例是不可变的,一旦创建,每个实例必须始终指向同一个地址。

 

2.2 打印基本信息

1 package cn.hason.socket.base;
2
3  import java.net.Inet4Address;
4 import java.net.Inet6Address;
5 import java.net.InetAddress;
6 import java.net.NetworkInterface;
7 import java.net.SocketException;
8 import java.net.UnknownHostException;
9 import java.util.Enumeration;
10
11 public class InetAddressExample {
12
13 public static void main(String[] args) {
14 try {
15 // 获取运行程序的主机的网络接口(network interface)
16 Enumeration<NetworkInterface> interfaceList = NetworkInterface
17 .getNetworkInterfaces();
18 if (interfaceList == null) {
19 // 一般来说不会等于 null ,毕竟最少还有回环接口(loopback interface).
20 System.out.println("-- No interface found --");
21 }
22 while (interfaceList.hasMoreElements()) {
23 NetworkInterface iface = interfaceList.nextElement();
24 System.out.println("Display name is " + iface.getDisplayName());
25 System.out.println("Interface: " + iface.getName());
26 Enumeration<InetAddress> addrList = iface.getInetAddresses();
27 if (addrList == null) {
28 // 若该网络接口没有任何地址,但毕竟最少还有回环地址
29 System.out.println("-- No address for this interface --");
30 }
31 while (addrList.hasMoreElements()) {
32 InetAddress address = addrList.nextElement();
33 System.out.print("Address"
34 + (address instanceof Inet4Address ? "(v4)"
35 : (address instanceof Inet6Address ? "(v6)"
36 : "(?)")));
37 System.out.println(": " + address.getHostAddress());
38 System.out.println("HostName: " + address.getHostName());
39 System.out.println();
40 }
41 }
42 } catch (SocketException e) {
43 e.printStackTrace();
44 }
45 }
46 }

posted on 2011-04-30 09:33  五月十七  阅读(304)  评论(0)    收藏  举报

导航