TCP && UDP

TCP

通信的步骤:
	服务器端启动,				      服务器端不会主动的请求客服端, 	必须使用客户端请求服务器
	客户端和服务器端建立一个逻辑连接, 		这个连接中包含一个对象,    这个对象就是IO对象
	客户端和服务器端就可以使用, 			IO对象进行通信, 			 通信的数据不仅仅是字符
	所以IO对象是字节流对象

TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据

	表示客户端的类:
		java.net.Socket:此类实现客户端套接字.套接字是两台机器间通信的端点
		套接字:包含了IP地址和端口号的网络单位

	构造方法:
		Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口号
		参数:
			String host:服务器主机的名称/服务器的IP地址
			int port:服务器的端口号
	成员方法:
		OutputStream getOutputStream():返回此套接字的输出流
		InputStream getInputStream():返回此套接字的输入流
		void close():关闭套接字
		void shutdownInput():禁用此套接字的输入流
		void shutdownOutput():禁用此套接字的输出流
			对于TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP的正常连接终止序列

	服务器端必须明确两件事情
		1.多个客户端同时和服务器进行交互,服务器必须明确和那个客服端进行交互
			在服务器端有一个方法,叫accept客户端获取到请求的客户端对象
		2.多个客户端同时和服务器进行交互,就需要使用多个IO对象
			服务器是没有IO流的,服务器可以获取到请求的客服端对象Socket
			使用每个客户端Socket中提供的IO流和客户进行交互
					服务器使用客户端的字节输入流读取客户端发送的数据
					服务器使用客户端的字节输出流给客户端回写数据
			简单记:服务器使用客户端的流和客户端交互

	实现步骤:
		1.创建一个客户端对象Socket,构造方法中绑定服务器的IP地址和端口号
		2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
		3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据
		4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
		5.使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据
		6.释放资源(Socket)
	注意:
		1.客户端和服务器端进行交互,必须使用Socket中提供的网络流,不能使用自己创建的流对象
		2.当我们创建客户端对象Socket的时候,就会去请求服务器和服务器经过3次握手建立连接通路
			这时如果服务器没有启动,那么就会抛出异常 Connection refused:connect
			如果服务器已经启动,那么就可以进行交互了

TCP通信的服务器端:接收客户端的请求,读取客户端发送的数据,给客户端回写数据
	
	表示服务器的类:
		java.net.ServerSocket:此类实现服务器套接字

	构造方法:
		ServerSocket(int port):创建绑定到特定端口的服务器套接字

	服务器必须明确一件事情,必须的知道是哪个客户端请求的服务器
		所以可以使用accept方法或渠道请求的客户端对象Socket

	成员方法:
		Socket accept():侦听并接受到此套接字的连接

	使用步骤:
		1.创建服务器ServerSocket对象和系统要指定的端口号
		2.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
		3.使用Socket对象中的方法getInputStream(),获取网络字节输入流InputStream对象
		4.使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据
		5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
		6.使用网络字节输出流OutputStream对象中的方法write,给客户端回写数据
		7.释放资源(Socket,ServerSocket)

UDP

1、发送端:
 	1、使用DatagramSocket创建一个发送的端点,可以不指定端口号
 	2、准备用于发送的数据报包:DatagramPacket
 	 	DatagramPacket(byte[] buf, int offset, int len, InetAddress address, int port)
 	 	 	buf:要发送的字节数组
 	 	 	offset:从哪个字节开始发
 	 	 	len:发送多少字节
 	 	 	address:IP
 	 	 	port:端口

 	 	InetAddress的使用方式:
 	 	 	1、表示一个ip地址的对象
 	 	 	2、可以通过静态方法获取这个对象
 	3、使用发送端点的发送方法:
 	 	ds.send(dp)

2、接收端:
 	1、使用DatagramSocket创建一个用于接收的端点,必须指定端口号
 	2、使用DatagramPacket创建用于接收数据的数据报包(容器)
 	3、使用接收端点的接收方法:
 	 	ds.recieve(dp)
 	4、使用DatagramPacket的方法,解析该对象
 	 	byte[] getData() 	 	 	获取对象中的字节数组
 	 	int getLength() 	 	 	获取在字节数组中本次接收到的长度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值