网络编程的目标就是为了发挥计算机网络互通信息,共享数据资源的作用。进行网络编程首先要确定的就是计算机资源的位置。在网络中的计算机以IP地址为标识,另一标识就是计算机主机名。有了这些标识就能找到网络中的计算机位置,但是一旦计算机中可能有很多网络应用程序在运行,这时还要知道计算机的入口,端口号就是用来唯一标识这些入口的。
对于网络编程来说,目前有两种编程模型:C/S结构和B/S结构
客户/服务器结构(C/S):指的是在客户端需要安装客户端软件,有客户软件负责与服务器端的数据通信,将任务合理分配到客户端和服务器端来实现。
浏览器/服务器结构(C/S):客户只需要安装Web浏览器,不需要安装客户端软件,大部分的逻辑事务处理都在服务器端完成,客户端浏览器只完成少量的事务处理,减少了客户端的计算机负载,减轻了系统维护与升级的成本和工作量。
1.2网络传输协议
网络上的计算机之间通过网络传输协议来交换信息。TCP/IP的传输层同时存在TCP和UDP两个协议。
TCP(Transfer Control Protocol):传输控制协议。TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输得到的是一种顺序无差错的数据流。
发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket等待建立连接时,另一个socket可以要求进行连接。一旦这两个socket连接起来,他们就可以双向数据传输,双方都可以进行发送或接收操作。TCP属于可靠的面向连接的服务,能够保证传输的质量。需要经过3次握手才能建立一个安全连接。
UDP(User Datagram Protocol):用户数据报协议。UDP是不可靠的无连接数据报服务。它不需要像TCP那样建立连接,直接发送,而不管接收端是否收到了数据,所以效率高,但不可靠。
UDP是一种无连接的协议,每个数据包都是一个独立的信息,包括完整的源地址或目的地址。UDP数据包在网络上传往目的地的路径是未知的,因此能否到达,到达的时间,以及内容是否正确都是不能确定的。使用UDP传输数据时大小是有限制的,每个被传输的数据包必须限定在64KB之内。
1.3Internet 地址(InetAddress类)
TCP/IP协议中的IP层主要负责网络主机的定位、数据传输的路由,有IP地址可以唯一的确定Internet上的一台主机。
java.net包提供了InetAddress类来代表IP地址的对象:InetAddress 描述了32或64位 IP地址。
1.4Socket(套接字)
TCP/IP是用于计算机通信的一组协议。它包括TCP(传输控制协议),UDP(用户数据包协议),HTTP(超文本传输协议),IP(网际协议),ICMP(互联网控制信息协议),SNMP(简单网络管理协议),ICMP(互联网控制信息协议),SMTP(简单邮件传输协议),ARP(地址解析协议),FTP(文件传输协议)等,这些协议一起构成TCP/IP协议。
Socket(套接字)是基于TCP/IP协议的编程接口,用于描述IP地址和 端口,是一个通信链的句柄。应用程序通常通过Socket向网络发出请求或应答请求。
Socket有两种主要的连接方式:面向连接的和面向无连接的。
面向连接的Socket类似于打电话,先拨号,建立一个连接,然后通话。数据包子啊达到接收端时的顺序和发送时的顺序是一样的。
无连接的Socket 只负责发出数据包,不保证数据包的传输质量以及到达目的地的顺序是否与发送时一致。
客户端:首先使用Socket对网络上的某一个服务器的某一个端口发送连接请求,一旦连接成功,则建立一个会话并打开。会话结束,关闭Socket。客户端不需要指定用什么端口去连接,通常系统会子哦对那个分配。
Socket j在java.net 包
Socket( ):以系统默认的方式创建未连接的套接字。
Socket( InetAddreass address,int port) :创建一个流套接字,其中address为目标IP地址,port 为目标端口号。
Socket( String host,int port) : 创建一个流套接字,其中host 为目标主机名,port为目标端口号。
服务器端:在服务器端y由ServerSocket 类负责实现服务器套接字。ServerSocket类位于java.net包中。由ServerSocket对象监听指定的端口,开始监听后,服务器就等待客户端连接请求,客户端链接请求后,会话开始,在会话完成后,关闭连接。
ServerSocket( ):创建非绑定服务器套接字。
ServetSocket( int port):创建服务器套接字,并绑定到某一端口,port 为指定的端口号。
------------补充-----------
利用套接字(Socke)接口开发网络应用程序早已经被广泛的采用,以至于成为事实上的标准。套接字能执行7中基本操作:
-- 连接到远程主机
-- 绑定到端口
-- 接收从远程机器来的连接请求
-- 监听到达的数据
-- 发送数据
-- 接收数据
-- 关闭连接
两个java应用程序可以通过一个双向的网络通信连接来实现数据交换,这个双向链路的一端称为一个Socket(套接字)。Socket通常用来实现Client/Server连接
java语言的基于套接字编程分为服务器编程和客户端编程,其通信模型如下: