.TCP/IP协议概述:

1.TCP/IP模型有四层结构:

①应用层(Application Layer):应用层为用户提供所需要的各种服务,负责传送各种最终形态的数据,是直接与用户打交道的层,典型协议包含HTTPFTP等。

②传输层(Transport Layer):传输层为应用层实体提供端到端的通信功能,该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP)。其中,TCP协议提供的是一种可靠的、面向连接的数据传输服务;而UDP协议提供的是不可靠的、无连接的数据传输服务。

③网络层(Internet Layer):网络层主要解决主机到主机的通信问题。该层有四个主要协议:网络协议(IP)、地址解析协议(ARP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)。其中,IP协议是网络层最重要的协议。

④链路层(Link  Layer):链路层负责建立电路连接,是整个网络的物理基础,典型的协议包括以太网、ADSL等。

2.进行网络编程主要需要解决两个问题:

①如何在网络中找到一台或多台主机:可以依靠网络层的IP解决,即提供主机的IP地址找到主机。

②当通信双方成功连接后,如何进行可靠的数据传输:针对传输层进行编程,传输层主要的两个协议是TCPUDP

3.TCPUDP

TCPTranfer Control Protocol):面向连接的,可靠的传输协议。

UDPUser Datagram Protocol):无连接的,不可靠的传输协议。

.单客户Socket编程

1.IP地址

①网络中有多台计算机,它们必须通过某种标识来区分每一台机器,这就是IP地址;

IP地址由4个字节共32位二进制数组成,类似于:192.168.0.8

③在网络寻找某一台计算机都是依靠它的IP地址(用域名或计算机名定位主机其实也是通过某种服务转成IP地址后再找到该主机)。

④许多网络地址被保留用于特殊用途;

0.0.0.0127.0.0.1就是两个此类地址,第一个称为缺省路由,后一个是环回地址;

127.0.0.1被保留用于用户主机的本地IP话务,它被分配给一个特殊接口,即起到闭合电路作用的环回接口。

2.端口

①在一台物理性的计算机中,往往运行着多个网络程序,一个IP地址并不足以完整标识一个服务器,因此,端口是机器内部独一无二的场所;

②一台计算机上可能同时运行多个网络程序,IP地址只能确保把数据送到指定的计算机,但不能保证把这些数据传递给哪个网络程序;

③端口使用一个16位的数字来表示,它的范围是0~655351024以下的端口号保留给预定义的服务,如:http使用80端口;

④网络间通信其实是在网络应用程序端口之间进行的。

3.①客户端

Socket(InetAddress address, int port);

Socket(InetAddress address, int port, boolean stream);

Socket(String host, int prot);

Socket(String host, int prot, boolean stream);

②服务器端:

ServerSocket(int port);

③获得输入输出流,Socket类中的方法

getInputStream,获得基于当前Socket的输入流

getOutputStream,获得基于当前Socket的输出流

4.Socket编程步骤:

①服务器端创建ServerSocket对象,调用accept方法返回Socket对象。

②客户端创建Socket对象,通过端口连接到服务器。

③客户端、服务器端都使用Socket中的getInputStream方法和getOutputStream方法获得输入流和输出流,进一步进行数据读写操作。

5.总结:①网络上的计算机通过IP地址来区分不同的机器;端口是数据的通道,使得多个应用程序在同一主机上进行网络通信;应用程序由一个IP地址和一个端口号唯一确定。

InetAddress用来描述主机地址;

Socket用来创建两台主机之间的连接;

ServerSocket用来侦听来自客户端的请求;

Socket通常称作“套接字”,通常通过“套接字”向网络发出请求或者应答网络请求。

.单一服务器对多客户端:

1.服务器:

①创建套接字。

②将套接字绑定到一个本地地址和端口上。

③将套接字设为监听模式,准备接收客户请求。

④等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字。启动线程为当前的连接服务。

⑤返回,等待另一客户请求。

⑥关闭套接字。

2.客户端:

①创建套接字。

②向服务器发出连接请求。

③和服务器端进行通信。

④关闭套接字。

3.程序:public class Server {

public static void main(String[] args) throws IOException {

    ServerSocket ss = new ServerSocket(10086);

    System.out.println("服务器正常启动。。。");

    while(true){

Socket socket = ss.accept();

System.out.println("用户接入成功。。。");

new ServerThread(socket).start();

     }

              }

        }