1.TCP
TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。
2.UDP
UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
3.两种协议简单比较
无连接的操作使用数据包协议。一个数据包是一个独立的单元,它包含了这次投递的所有信息。类似信封,它有目的地址和要发送的内容。这个模式下的Socket不需要连接一个目的Socket,它只是简单的投出数据报,无连接的操作时快速的和高效的,但是数据安全性不佳。
面向连接的操作使用TCP协议,这个模式下的Socket必须在发送数据之前与目的地的Socket取得连接。一旦连接建立了,Socket就可以使用一个流接口进行打开、读写关闭操作。所有发送的信息都会在另一端以同样的顺序被接受。面向连接的操作比无连接操作效率低,但数据安全性高。
4.URL及应用示例
URL(统一资源定位器)表示因特网上某一资源的地址。
组成:
URL的一般格式为(带方括号[]的为可选项):
protocol:// hostname[:port] / path / [;parameters][?query]#fragment
5.URL及应用示例
URL(统一资源定位器)表示因特网上某一资源的地址。
组成:
URL的一般格式为(带方括号[]的为可选项):
protocol:// hostname[:port] / path / [;parameters][?query]#fragment
http://www.imailtone.com:80/WebApplication1/WebForm1.aspx?name=tom&age=20#resume
6.创建一个URL
public URL (String spec);
通过一个表示URL地址的字符串,构造一个URL对象。
URL urlBase=new URL("http://www. 263.net/")
7.类URL的构造方法都声明抛弃非运行时例外(MalformedURLException),因此生成URL对象时,我们必须要对这一例外进行处理,通常是用try-catch语句进行捕获。格式如下:
try{
URL myURL= new URL(…)
}catch (MalformedURLException e){
…
//exception handler code here
…
}
8.解析一个URL
一个URL对象生成后,其属性是不能被改变的,但是我们可以通过类URL所提供的方法来获取这些属性:
public String getProtocol() 获取该URL的协议名。
public String getHost() 获取该URL的主机名。
public int getPort() 获取该URL的端口号,如果没有设置端口,返回-1。
public String getFile() 获取该URL的文件名
public String getRef() 获取该URL在文件中的相对位置。
public String getQuery() 获取该URL的查询信息。
public String getPath() 获取该URL的路径
public String getAuthority() 获取该URL的权限信息
public String getUserInfo() 获得使用者的信息
public String getRef() 获得该URL的锚
9.从URL读取WWW网络资源
得到一个URL对象后,就可以通过它读取指定的WWW资源。这时将使用URL的方法
InputStream openStream();
方法openSteam()与指定的URL建立连接并返回InputStream类的对象,以便从这一连接中读取数据。
10.通过URLConnetction连接WWW
通过URL的方法openStream(),只能从网络上读取数据,如果同时还想输出数据,就要使用类URLConnection。
当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的URLConnection对象
11.类URLConnection提供了很多方法来设置或获取连接参数,程序设计时最常使用的是getInputStream()和getOutputStream(),其定义为:
InputSteram getInputSteram();
OutputSteram getOutputStream();
通过返回的输入/输出流我们可以与远程对象进行通信。
12.InetAdress类
Internet上的主机有两种方式表示地址:
域名:www.sina.com.cn
IP地址:192.168.6.100
java.net包中的InetAddress类对象含有一个Internet主机的域名和IP地址如:
www.sina.com.cn/202.108.35.210
域名比较容易记忆,当我们在连接网络输入一个主机的域名后,域名服务器(DNS)负责将域名转换成IP地址,这样我们就和主机建立了连接。
13.获取Internet主机的地址
我们可以使用InetAddress类的静态方法getByname(String s)将一个域名或者一个IP地址传递给该方法的参数s,获得一个InetAdress的对象该对象就会包含如下信息:
www.sina.com.cn/202.108.37.40,
另外 InetAddress类中含有两个实例方法:
public String getHostName()获取域名
public String getHostAddress()获得IP地址
14.获取Internet主机的地址
我们可以使用InetAddress类的静态方法getByname(String s)将一个域名或者一个IP地址传递给该方法的参数s,获得一个InetAdress的对象该对象就会包含如下信息:
www.sina.com.cn/202.108.37.40,
另外 InetAddress类中含有两个实例方法:
public String getHostName()获取域名
public String getHostAddress()获得IP地址
15.Socket编程
Socket通常也称作“套接字”,用于描述IP地址和端口,应用程序通常通过“套接字”向网络发出请求或者应答网络请求。它是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。
java.net包中定义两个类Socket和ServerSocket(用来实现TCP中的Server连接),分别用来实现双向连接的client和server端。
建立连接需要远程计算机的IP地址和端口号。
16.Socket有两种主要的操作方式:面向连接的和无连接的。面向连接的Socket操作就像一部电话,必须建立一个连接和一个呼叫,所有的事情到达的顺序与它们出发时的顺序是一样的。无连接的Socket操作就像是一个邮件投递,没有什么保证,多个邮件到达时的顺序可能与出发时的顺序不一样。
17.Socket通讯的一般过程
使用Socket进行Client/Server程序设计的一般连接过程是这样的:
Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。
18.工作过程包含以下四个基本的步骤:
(1) 创建Socket;
(2) 打开连接到Socket的输入/出流;
(3) 按照一定的协议对Socket进行读/写操作;
(4) 关闭Socket.
第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。
以上4个步骤是针对TCP传输而言的,使用UDP进行传输时略有不同,在后面会有具体讲解。
19.创建Socket
java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。其构造方法如下:
Socket(InetAddress address, int port);
Socket(InetAddress address, int port, boolean stream);
Socket(String host, int port);
Socket(String host, int port, boolean stream);
20.Socket(SocketImpl impl)
Socket(String host, int port, InetAddress localAddr, int localPort)
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
ServerSocket(int port);
ServerSocket(int port, int backlog);
ServerSocket(int port, int backlog, InetAddress bindAddr)
其中address、host和port分别是双向连接中另一方的IP地址、主机名和端口号,stream指明socket是流socket还是数据报socket,localPort表示本地主机的端口号,localAddr和bindAddr是本地机器的地址(ServerSocket的主机地址),impl是socket的父类,既可以用来创建serverSocket又可以用来创建Socket。count则表示服务端所能支持的最大连接数。
Socket client = new Socket("127.0.01.", 80);
ServerSocket server = new ServerSocket(80);
注意,在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
21.
Socket client = new Socket("127.0.01.", 80);
ServerSocket server = new ServerSocket(80);
注意,在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
22.关闭Socket
每一个Socket存在时,都将占用一定的资源,在Socket对象使用完毕时,要其关闭。关闭Socket可以调用Socket的Close()方法。在关闭Socket之前,应将与Socket相关的所有的输入/输出流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与Socket相关的所有的输入/输出该首先关闭,然后再关闭Socket。
os.close();
is.close();
socket.close();
尽管Java有自动回收机制,网络资源最终是会被释放的。但是为了有效的利用资源,建议读者按照合理的顺序主动释放资源。
23.UDP数据报
所谓数据报(Datagram)就跟日常生活中的邮件系统一样,是不能保证可靠的寄到的,而面向链接的TCP就好比电话,双方能肯定对方接受到了信息。
UDP通信,需要建立一个DatagramSocket,与Socket不同,它不存在“连接”的概念,取而代之的是一个数据报包DatagramPacket。
DatagramPacket必须知道自己来自何处,以及打算去哪里,因此必须包含IP地址、端口号和数据内容。
24.DatagramSocket、DatagramPacket
DatagramSocket用于在程序之间建立传送数据报的通信连接,DatagramPacket则用来表示一个数据报。
如果DatagramSocket用来接收数据,使用构造方法:public DatagramSocket(int port);
如果用来发送数据,使用构造方法:public DatagramSocket();
所有的端口、目的地地址和数据,需要由DatagramPacket指定。
25.接收数据时,使用receive(DatagramPacket data)方法,获取的数据报存放在data中。发送数据时,使用send(DatagramPacket data)方法,发送的端口、目的地址和数据都在data中。
DatagramPacket的对象就是数据报的载体,如果用来接收数据,使用构造方法DatagramPacket(byte[] buf, int length);
buf是存在数据的字节型数组,length是能接收的最大长度。
26.如果用来发送数据,使用构造方法DatagramPacket(byte[] buf, int length, InetAddress address, int port);
后两个参数分别是目的地和端口。
TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。
2.UDP
UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
3.两种协议简单比较
无连接的操作使用数据包协议。一个数据包是一个独立的单元,它包含了这次投递的所有信息。类似信封,它有目的地址和要发送的内容。这个模式下的Socket不需要连接一个目的Socket,它只是简单的投出数据报,无连接的操作时快速的和高效的,但是数据安全性不佳。
面向连接的操作使用TCP协议,这个模式下的Socket必须在发送数据之前与目的地的Socket取得连接。一旦连接建立了,Socket就可以使用一个流接口进行打开、读写关闭操作。所有发送的信息都会在另一端以同样的顺序被接受。面向连接的操作比无连接操作效率低,但数据安全性高。
4.URL及应用示例
URL(统一资源定位器)表示因特网上某一资源的地址。
组成:
URL的一般格式为(带方括号[]的为可选项):
protocol:// hostname[:port] / path / [;parameters][?query]#fragment
5.URL及应用示例
URL(统一资源定位器)表示因特网上某一资源的地址。
组成:
URL的一般格式为(带方括号[]的为可选项):
protocol:// hostname[:port] / path / [;parameters][?query]#fragment
http://www.imailtone.com:80/WebApplication1/WebForm1.aspx?name=tom&age=20#resume
6.创建一个URL
public URL (String spec);
通过一个表示URL地址的字符串,构造一个URL对象。
URL urlBase=new URL("http://www. 263.net/")
7.类URL的构造方法都声明抛弃非运行时例外(MalformedURLException),因此生成URL对象时,我们必须要对这一例外进行处理,通常是用try-catch语句进行捕获。格式如下:
try{
URL myURL= new URL(…)
}catch (MalformedURLException e){
…
//exception handler code here
…
}
8.解析一个URL
一个URL对象生成后,其属性是不能被改变的,但是我们可以通过类URL所提供的方法来获取这些属性:
public String getProtocol() 获取该URL的协议名。
public String getHost() 获取该URL的主机名。
public int getPort() 获取该URL的端口号,如果没有设置端口,返回-1。
public String getFile() 获取该URL的文件名
public String getRef() 获取该URL在文件中的相对位置。
public String getQuery() 获取该URL的查询信息。
public String getPath() 获取该URL的路径
public String getAuthority() 获取该URL的权限信息
public String getUserInfo() 获得使用者的信息
public String getRef() 获得该URL的锚
9.从URL读取WWW网络资源
得到一个URL对象后,就可以通过它读取指定的WWW资源。这时将使用URL的方法
InputStream openStream();
方法openSteam()与指定的URL建立连接并返回InputStream类的对象,以便从这一连接中读取数据。
10.通过URLConnetction连接WWW
通过URL的方法openStream(),只能从网络上读取数据,如果同时还想输出数据,就要使用类URLConnection。
当与一个URL建立连接时,首先要在一个URL对象上通过方法openConnection()生成对应的URLConnection对象
11.类URLConnection提供了很多方法来设置或获取连接参数,程序设计时最常使用的是getInputStream()和getOutputStream(),其定义为:
InputSteram getInputSteram();
OutputSteram getOutputStream();
通过返回的输入/输出流我们可以与远程对象进行通信。
12.InetAdress类
Internet上的主机有两种方式表示地址:
域名:www.sina.com.cn
IP地址:192.168.6.100
java.net包中的InetAddress类对象含有一个Internet主机的域名和IP地址如:
www.sina.com.cn/202.108.35.210
域名比较容易记忆,当我们在连接网络输入一个主机的域名后,域名服务器(DNS)负责将域名转换成IP地址,这样我们就和主机建立了连接。
13.获取Internet主机的地址
我们可以使用InetAddress类的静态方法getByname(String s)将一个域名或者一个IP地址传递给该方法的参数s,获得一个InetAdress的对象该对象就会包含如下信息:
www.sina.com.cn/202.108.37.40,
另外 InetAddress类中含有两个实例方法:
public String getHostName()获取域名
public String getHostAddress()获得IP地址
14.获取Internet主机的地址
我们可以使用InetAddress类的静态方法getByname(String s)将一个域名或者一个IP地址传递给该方法的参数s,获得一个InetAdress的对象该对象就会包含如下信息:
www.sina.com.cn/202.108.37.40,
另外 InetAddress类中含有两个实例方法:
public String getHostName()获取域名
public String getHostAddress()获得IP地址
15.Socket编程
Socket通常也称作“套接字”,用于描述IP地址和端口,应用程序通常通过“套接字”向网络发出请求或者应答网络请求。它是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。
java.net包中定义两个类Socket和ServerSocket(用来实现TCP中的Server连接),分别用来实现双向连接的client和server端。
建立连接需要远程计算机的IP地址和端口号。
16.Socket有两种主要的操作方式:面向连接的和无连接的。面向连接的Socket操作就像一部电话,必须建立一个连接和一个呼叫,所有的事情到达的顺序与它们出发时的顺序是一样的。无连接的Socket操作就像是一个邮件投递,没有什么保证,多个邮件到达时的顺序可能与出发时的顺序不一样。
17.Socket通讯的一般过程
使用Socket进行Client/Server程序设计的一般连接过程是这样的:
Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。
18.工作过程包含以下四个基本的步骤:
(1) 创建Socket;
(2) 打开连接到Socket的输入/出流;
(3) 按照一定的协议对Socket进行读/写操作;
(4) 关闭Socket.
第三步是程序员用来调用Socket和实现程序功能的关键步骤,其他三步在各种程序中基本相同。
以上4个步骤是针对TCP传输而言的,使用UDP进行传输时略有不同,在后面会有具体讲解。
19.创建Socket
java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。其构造方法如下:
Socket(InetAddress address, int port);
Socket(InetAddress address, int port, boolean stream);
Socket(String host, int port);
Socket(String host, int port, boolean stream);
20.Socket(SocketImpl impl)
Socket(String host, int port, InetAddress localAddr, int localPort)
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
ServerSocket(int port);
ServerSocket(int port, int backlog);
ServerSocket(int port, int backlog, InetAddress bindAddr)
其中address、host和port分别是双向连接中另一方的IP地址、主机名和端口号,stream指明socket是流socket还是数据报socket,localPort表示本地主机的端口号,localAddr和bindAddr是本地机器的地址(ServerSocket的主机地址),impl是socket的父类,既可以用来创建serverSocket又可以用来创建Socket。count则表示服务端所能支持的最大连接数。
Socket client = new Socket("127.0.01.", 80);
ServerSocket server = new ServerSocket(80);
注意,在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
21.
Socket client = new Socket("127.0.01.", 80);
ServerSocket server = new ServerSocket(80);
注意,在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
22.关闭Socket
每一个Socket存在时,都将占用一定的资源,在Socket对象使用完毕时,要其关闭。关闭Socket可以调用Socket的Close()方法。在关闭Socket之前,应将与Socket相关的所有的输入/输出流全部关闭,以释放所有的资源。而且要注意关闭的顺序,与Socket相关的所有的输入/输出该首先关闭,然后再关闭Socket。
os.close();
is.close();
socket.close();
尽管Java有自动回收机制,网络资源最终是会被释放的。但是为了有效的利用资源,建议读者按照合理的顺序主动释放资源。
23.UDP数据报
所谓数据报(Datagram)就跟日常生活中的邮件系统一样,是不能保证可靠的寄到的,而面向链接的TCP就好比电话,双方能肯定对方接受到了信息。
UDP通信,需要建立一个DatagramSocket,与Socket不同,它不存在“连接”的概念,取而代之的是一个数据报包DatagramPacket。
DatagramPacket必须知道自己来自何处,以及打算去哪里,因此必须包含IP地址、端口号和数据内容。
24.DatagramSocket、DatagramPacket
DatagramSocket用于在程序之间建立传送数据报的通信连接,DatagramPacket则用来表示一个数据报。
如果DatagramSocket用来接收数据,使用构造方法:public DatagramSocket(int port);
如果用来发送数据,使用构造方法:public DatagramSocket();
所有的端口、目的地地址和数据,需要由DatagramPacket指定。
25.接收数据时,使用receive(DatagramPacket data)方法,获取的数据报存放在data中。发送数据时,使用send(DatagramPacket data)方法,发送的端口、目的地址和数据都在data中。
DatagramPacket的对象就是数据报的载体,如果用来接收数据,使用构造方法DatagramPacket(byte[] buf, int length);
buf是存在数据的字节型数组,length是能接收的最大长度。
26.如果用来发送数据,使用构造方法DatagramPacket(byte[] buf, int length, InetAddress address, int port);
后两个参数分别是目的地和端口。