Java Socket编程笔记.doc
文本预览下载声明
简介
数据从一台主机传输到另一台主机的经过:
TCP协议和UDP协议使用端口号作为地址,端口号用来区分同一主机中不同应用程序。TCP和UDP也被成为端到端传输协议end-to-end transport protocol,它将数据从一个应用程序传输到另一个应用程序,而IP协议只是将数据从一个主机传输到另一个主机。
互联网地址由二进制数字组成,IPV4地址长32位,大约40亿个独立地址,IPV6是128位的。
Socket(套接字)是一种抽象层,应用程序通过它来发送和接收数据,像应用程序打开一个文件句柄,将数据读写到文档的存储器上一样。使用socket可以将应用程序添加到网络中,并与处于同一个网络中的其他应用程序进行通信。
TCP/IP协议族中socket类型为流套接字(stream socket,TCP协议使用)和数据包套接字(datagram socket,UDP协议使用)。
基本知识
Socket地址
Readiness类代表了一个网络目标地址,有两个子类,Inet4Address和Inet6Address,分别对应IPV4地址和IPV6地址。
下面例子中,首先打印出于本地主机关联的所有IP地址,包括IPV4和IPV6,然后对于每个在命令行中指定的主机,打印出相关的主机名和地址。
try {
//返回包含了该主机每个接口所对应的NetworkInterface实例的列表
EnumerationNetworkInterface interfaceList = NetworkInterface
.getNetworkInterfaces();
if (interfaceList == null) {
System.out.println(--No interfaces found--);
} else {
while (interfaceList.hasMoreElements()) {
NetworkInterface iface = interfaceList.nextElement();
System.out.println(Interface + iface.getName() + :);
//获取该接口下所有InetAddress实例
EnumerationInetAddress addrList = iface.getInetAddresses();
if (!addrList.hasMoreElements()) {
System.out.println(\t(No addresses for this interface));
}
while (addrList.hasMoreElements()) {
InetAddress address = addrList.nextElement();
System.out.print(\tAddress
+ ((address instanceof Inet4Address ? (v4)
: (address instanceof Inet6Address ? (v6)
: (?)))));
System.out.println(: + address.getHostAddress());
}
}
}
} catch (SocketException se) {
System.out.println(Error getting network interfaces:
+ se.getMessage());
}
String host = ;
try {
System.out.println(host + :);
InetAddress[] addressList = InetAddress.getAllByName(host);
for (InetAddress address : addressList) {
//获取主机名和主机ip地址
System.out.println(\t + address.getHostName() + /
+ address.getHostAddress());
}
} catch (UnknownHostException e) {
System.out.println(\tUnable to find address for + host);
}
} 运行
显示全部