Java网络编程

网络编程中的两个主要问题

  • 如何准确的定位网络上的一台或者多台主机

TCP/IP协议中IP协议主要负责网络主机的定位,数据传输的路由,可以由IP地址唯一的确定Internet上的一台主机。

  • 找到主机后如何进行可靠高效的数据传输

TCP层提供面向应用的可靠传输(TCP) 或者非可靠的UDP数据传输机制。目前比较流行的网络编程模型为C/S架构,也就是通信一方作为服务器等待客户提出请求并给予相应,客户端在需要服务时向服务器提出申请。服务器一般作为守护进程始终执行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。

TCP协议和UDP协议

TCP:Transfer Control Protocol的简称,是一种面向连接的可靠传输协议。通过TCP协议传输得到的是一个顺序的无差错的数据流,发送方和接收方的成对的连个socket必须建立连接,以便在TCP协议的基础上进行通信。

UDP:User Datagram Protocol的简称,是一种无连接的协议。每个数据报都是一个独立的消息,包括完整的源地址或目的地址,在网络上以任何可能的路径进行传送,能否到达目的地以及到达的时间都不确定。

UDP TCP
连接性 无连接 面向连接
传输数据大小 大小有限制,64KB以内 统一格式数据传输
可靠性 不可靠,不保证到达 可靠协议
应用 Telnet/FTP 视频会议

基于Socket的Java网络编程

网络上两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端成为一个Socket。Socket通常用来实现客户方和服务端的链接。一个Socket由一个IP和一个PROT唯一确定。Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。

Socket通信流程

  1. Server端监听某个端口是否有连接请求
  2. Client端相Server端发送Connect请求
  3. Server端相Client端发送Accept消息,建立连接。
  4. Server端和Client端都可以通过Send,Write等方式通信。
  5. 关闭Socket

创建一个Socket

Java中java.net包中提供了两个类,Socket,ServerSocket,分别表示双向连接的客户端和服务端。

客户端类的构造方法:

1
2
3
4
5
6
7
public Socket(String host, int port)
throws UnknownHostException, IOException
{
this(host != null ? new InetSocketAddress(host, port) :
new InetSocketAddress(InetAddress.getByName(null), port),
(SocketAddress) null, true);
}

服务端的构造方法:

1
2
3
public ServerSocket(int port) throws IOException {
this(port, 50, null);
}

简单的Client/Server程序


未完

Donate comment here