章节内容
套接字Socket数据报Datagram
章节目标
了解网络通信中的IP,端口和协议掌握套接字的使用熟悉数据报的使用
一、网络基础
1.软件结构
C/S结构
C => Client,表示客户端
S => Server,表示服务器端
B/S结构
B => Browser,表示浏览器
S => Server,表示服务器端
2.网络通信协议
TCP
TCP(传输控制协议)是基于连接的协议,可在两台计算机之间提供可靠的数据流。
UDP
UDP(用户数据报协议)是一种协议,它从一台计算机向另一台计算机发送独立的数据包(称为数据报),而不能保证其到达。 UDP不像TCP那样基于连接。而是将独立的 数据包(称为数据报)从一个应用程序发送到另一个应用程序。 发送数据报就像通过邮局发送一封信一样:传递顺序并不重要,也不能保证,每条消息彼此独立。
IP和端口
该IP地址用于将数据传递到网络上正确的计算机
端口由一个16位数字标识,端口号的范围是0到65,535,因为端口由16位数字表示。端口号范围从0 - 1023被限制,供计算机上运行的不同应用程序使用,
URL
URL是“统一资源定位符”的缩写。 URL具有两个主要组成部分:访问资源所需的协议和资源的位置
二、套接字Socket
什么是Socket
套接字是网络上运行的两个程序之间双向通讯链接的一个端点。 套接字类用于表示客户端程序和服务器程序之间的连接。 包提供了两个类-Socket和ServerSocket-分别实现连接的客户端和连 接的服务器。
如何使用Socket
服务器端
服务器只是等待,侦听套接字 以请求客户端发出连接请求。
客户端
客户端知道服务器在其上运行的计算机的主机名以及服务器在其上侦听的端口号。 为了发 出连接请求,客户端尝试在服务器的机器和端口上与服务器会合。 客户端还需要向服务器标识自己,以便客户端绑定到在此连接期间将使用的本地端口号。 这通常是由系统分配的
Socket
Socket常用构造方法
//创建一个套接字,连向给定IP的主机,并与该主机给定端口的应用通信public Socket(String host, int port) throws UnknownHostException, IOException; //创建一个套接字,连向给定IP信息的主机,并与该主机给定端口的应用通信 public Socket(InetAddress address, int port) throws IOException;
Socket常用方法
//获取读取数据的通道 public InputStream getInputStream() throws IOException; //获取输出数据的通道 public OutputStream getOutputStream() throws IOException; //设置链接的超时时间,0表示不会超时public synchronized void setSoTimeout(int timeout) throws SocketException; //标识输入通道不再接收数据,如果再次向通道中读取数据,则返回-1,表示读取到末尾public void shutdownInput() throws IOException; //禁用输出通道,如果再次向通道中输入数据,则会报IOException public void shutdownOutput() throws IOException; //关闭套接字,相关的数据通道都会被关闭public synchronized void close() throws IOException;
ServerSocket
ServerSocket常用构造方法
//创建一个服务器套接字并占用给定的端口public ServerSocket(int port) throws IOException;
ServerSocket常用方法
//侦听与此套接字建立的连接并接受它。 该方法将阻塞,直到建立连接为止。public Socket accept() throws IOException; //设置链接的超时时间,0表示不会超时public synchronized void setSoTimeout(int timeout) throws SocketException; 1234
客户端与服务器端通信
三、数据报Datagram
1.什么是数据报
数据报是通过网络发送的独立的自包含的消息,其是否到达、到达时间和内容无法得到保证。
2.如何使用Datagram
DatagramSocket常用构造方法
//构建一个绑定在任意端口的收发数据报的套接字public DatagramSocket() throws SocketException;//构建一个绑定在给定端口的收发数据报的套接字public DatagramSocket(int port) throws SocketException;
DatagramSocket常用方法
//发送给定的数据包public void send(DatagramPacket p) throws IOException;//接收数据至给定的数据包public synchronized void receive(DatagramPacket p) throws IOException;//设置链接的超时时间,0表示不会超时public synchronized void setSoTimeout(int timeout) throws SocketException;
DatagramPacket常用构造方法
//构建一个接收数据的数据包public DatagramPacket(byte buf[], int length);//构建一个发送数据的数据包public DatagramPacket(byte buf[], int offset, int length,InetAddress address,int port);
DatagramPacket常用方法
//获取发送数据的主机IP地址public synchronized InetAddress getAddress();//获取发送数据的主机使用的端口public synchronized int getPort();//获取数据包中数据的长度public synchronized int getLength();