首页 > 其他 > 详细

网络编程

时间:2017-02-11 11:21:21      阅读:201      评论:0      收藏:0      [点我收藏+]

一、网络编程基础

java的网络通信可以使用TCP、IP和UDP等协议。在真正进行java网络编程之前,对这些协议进行简单的介绍。

1、TCP协议

TCP(Transmission Control Protocol),指的是传输控制协议,它是网络传输层的协议,主要负责数据的分组和重组。TCP协议提供了一种可靠的数据传输服务,它是面向连接的,大多数的网络应用程序都是用TCP协议来实现传输层。使用TCP协议创建一个网络应用程序非常容易,它可以保证数据传输的时间、顺序和内容正确无误。但是使用TCP 需要大量的网络开销,所以如果希望实现更高效的传输,使用TCP协议就不合适了。TCP所提供服务的主要特点如下:

(1)面向连接的传输(可靠性的保证)

(2)端到端的通信

(3)高可靠性,确保传输数据的正确性,不出现丢失或乱序。

(4)全双工方式传输

(5)采用字节流方式,即以字节为单位传输字节序列(面向字节流)

(6)紧急数据传送功能

2、IP协议

IP(Internet Protocol)(网络之间互联的协议)的缩写,中文简写成为“网协”,也就是为计算机网络互相连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。

IP地址是一个32为(IPv4)或128(IPv6)的无符号数字,使用4组数字表示固定的编号,数字之间用一个点号隔开,例如“172.168.1.52”就代表网络中一个计算机唯一的地址编号。

3、TCP/IP

TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WAN)设计的。它是由ARPANET网的研究机构发展起来的。

4、UDP协议

UDP(User Datagram Protocol),指的是用户数据报协议。它和TCP协议一样,都是网络传输层上的协议,但是它与TCP有着本质的区别。使用UDP协议传输时,不保证数据一定能到达目的地,也不保证到达的顺序性。但是UDP协议占用的资源比较少,所以一般用在一些可靠性要求比较低的网络应用上,如网络视频会议、在线影视和聊天室等音频、视频数据传送。

5、端口

端口(Port)可以被理解为计算机与外界通信交流的窗户。当一个信息到达时,根据其请求的端口号不同,就可以知道应该提供哪个服务了

                                                                          常见服务端口表

服务 端口
HTTP 80
FTP 21
Telnet 23
SMTP 25

6、套接字

套接字(Socket)是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端面点,简单说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。某个程序将一段信息写入套接字中,该套接字就会将这段信息发送给另一个套接字,就像电话线的两端一样,这样另一端的程序就通过另一个套接字收到这段信息。所以使用套接字编程有时也称为Socket编程

7、java.net包

在java的API中,java.net包是用来提供网络服务的,java.net包中含有各种专门用来开发网络应用程序的类,程序开发人员可以使用该包中的类很容易的建立基于TCP可靠连接的网络程序,以及基于UDP不可靠连接的网络程序。java.net包可以大致分为以下两个部分:

(1)低级API,用于处理网络地址(也就是网络标识符,如IP地址)、套接字(也就是基本双向数据通信机制)和接口(用于描述网络接口)。

(2)搞基API,用于处理URL(表示统一资源标识符)、URL(表示统一资源标识符)、URLConnection连接(表示到URL所指向资源的连接)等。

二、InetAddress类

任何一台运行在Internet上的主机都有IP地址和当地的DNS能够解析的域名。而在java.net包中相应的提供了IP地址的封装类InetAddress。

InetAddress类用于描述和包装一个Internet IP地址,并提供了相关的常用方法,如解析IP地址的主机名称、获取本机IP地址的封闭、测试指定IP地址是否可达等。InetAddress实现java.io.Serializable接口,不允许继承。通过以下三种方法返回InetAddress实例。

    getLocalhost():返回封装本地地址的实例

   getAllByName(String host):返回封装Host地址的InetAddress实例数组

    getByName(String host):返回一个封装Host地址的实例。其中,Host可以是域名或者是一个合法的IP地址。

   InetAddress类的常用方法

 

 boolean      equals(Object obj)
          将此对象与指定对象比较。
 byte[] getAddress()
          返回此 InetAddress 对象的原始 IP 地址。
static InetAddress[] getAllByName(String host)
          在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
static InetAddress getByAddress(byte[] addr)
          在给定原始 IP 地址的情况下,返回 InetAddress 对象。
static InetAddress getByAddress(String host, byte[] addr)
          根据提供的主机名和 IP 地址创建 InetAddress。
static InetAddress getByName(String host)
          在给定主机名的情况下确定主机的 IP 地址。
 String getCanonicalHostName()
          获取此 IP 地址的完全限定域名。
 String getHostAddress()
          返回 IP 地址字符串(以文本表现形式)。
 String getHostName()
          获取此 IP 地址的主机名。
static InetAddress getLocalHost()
          返回本地主机。
 int hashCode()
          返回此 IP 地址的哈希码。
 boolean isAnyLocalAddress()
          检查 InetAddress 是否是通配符地址的实用例行程序。
 boolean isLinkLocalAddress()
          检查 InetAddress 是否是链接本地地址的实用例行程序。
 boolean isLoopbackAddress()
          检查 InetAddress 是否是回送地址的实用例行程序。
 boolean isMCGlobal()
          检查多播地址是否具有全局域的实用例行程序。
 boolean isMCLinkLocal()
          检查多播地址是否具有链接范围的实用例行程序。
 boolean isMCNodeLocal()
          检查多播地址是否具有节点范围的实用例行程序。
 boolean isMCOrgLocal()
          检查多播地址是否具有组织范围的实用例行程序。
 boolean isMCSiteLocal()
          检查多播地址是否具有站点范围的实用例行程序。
 boolean isMulticastAddress()
          检查 InetAddress 是否是 IP 多播地址的实用例行程序。
 boolean isReachable(int timeout)
          测试是否可以达到该地址。
 boolean isReachable(NetworkInterface netif, int ttl, int timeout)
          测试是否可以达到该地址。
 boolean isSiteLocalAddress()
          检查 InetAddress 是否是站点本地地址的实用例行程序。
 String toString()
          将此 IP 地址转换为 String
 1 import java.io.IOException;
 2 import java.net.InetAddress;
 3 import java.net.UnknownHostException;
 4 
 5 public class javaTest2 extends Thread  {
 6 
 7     public static void main(String[] args) throws IOException {
 8         InetAddress ia=InetAddress.getLocalHost();
 9           System.out.println(ia);
10         InetAddress ia1=InetAddress.getByName("www.baidu.com");
11         System.out.println(ia1);
12         System.out.println(ia.isReachable(1000));
13     }  
14 }

运行结果: 1 qinghan/10.160.10.202 2 www.baidu.com/220.181.111.188 3 false 

分析结果:当使用isReachable()函数时出现false的原因,查资料是因为防火墙阻止了外面进来的ICMP数据包

注:查看api文档,发现InetAddress类没有构造函数~

 

三、URL网络编程

1、URL类

URL由两部分组成:协议标识符和资源名称。其中“http”为使用的协议,它指的是超文本传输协议(HTTP)。其他常用的协议还包括文件传输协议(FTP)、Gopher、File和News。

URL类提供了多个方法,可以获取URL对象协议、主机名、端口号、路径、查询字符串、文件名及资源引用。

构造函数表

URL(String spec)
          根据 String 表示形式创建 URL 对象。
URL(String protocol, String host, int port, String file)
          根据指定 protocolhostport 号和 file 创建 URL 对象。
URL(String protocol, String host, int port, String file, URLStreamHandler handler)
          根据指定的 protocolhostport 号、filehandler 创建 URL 对象。
URL(String protocol, String host, String file)
          根据指定的 protocol 名称、host 名称和 file 名称创建 URL。
URL(URL context, String spec)
          通过在指定的上下文中对给定的 spec 进行解析创建 URL。
URL(URL context, String spec, URLStreamHandler handler)
          通过在指定的上下文中用指定的处理程序对给定的 spec 进行解析来创建 URL。

网络编程

原文:http://www.cnblogs.com/xiaotiaosi/p/6388684.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!