UDP和TCP

目录

UDP编程

服务器端实现步骤:

客户端实现步骤:

TCP编程

Socket通信

服务器端实现步骤

客户端实现步骤


UDP编程

UDP协议是无连接的、不可靠的、无序的,传输速度会比较快,以数据报为传输载体。也就是说,进行数据传输时,首先需要将要传输的数据定义为数据报(Datagram),在数据报中指明数据所要达到的主机地址和端口号(Socket),然后再将数据报发送出去。

具体两个相关操作类:

DatagramPacket(表示数据报包)、

DatagramSocket(进行端到端通信的类,实现基于UDP的Socket通信)

服务器端实现步骤:

1、创建DatagramSocket,并指定端口号;

2、创建DatagramPacket,用来接收客户端发送的数据;

3、接收客户端发送的数据信息;

4、读取数据。

public class UDPServer {

	public static void main(String[] args) throws IOException {
		// 1、创建服务器端DatagramSocket,指定端口号;
		DatagramSocket socket=new DatagramSocket(8801);
		//2、创建DatagramPacket,接收客户端数据;
		byte[] data=new byte[1024];//创建字节数组,指定接收数据包的大小
		DatagramPacket packet=new DatagramPacket(data,data.length);
		//3、接收客户端发送的数据信息
		System.out.println("**********服务器已启动,等待客户端发送数据*************");
		socket.receive(packet);//此方法在接收到数据之前处于阻塞状态
		//4、读取客户端数据信息
		String info=new String(data,0,packet.getLength());
		System.out.println("我是服务器,客户端说"+info);
		/*
		 * 向客户端响应数据
		 */
		//1、定义客户端的地址、端口号和数据
		InetAddress address=packet.getAddress();
		int port=packet.getPort();
		byte[] data2="欢迎您!".getBytes();
		//2、创建数据报,包含相应的信息
		DatagramPacket packet2=new DatagramPacket(data2,data2.length,address,port);
		//3、响应客户端
		socket.send(packet2);
		//4、关闭端口信息
		socket.close();
	}

}

 

客户端实现步骤:

1、定义发送的数据信息,包括要发送的服务器的IP地址、端口号及发送的内容;

2、创建DatagramPacket,包含将要发送的信息;

3、创建DatagramSocket,实现数据的发送;

4、通过Socket发送数据。

public class UDPClint {

	public static void main(String[] args) throws IOException {
		// 1、定义服务器的地址、端口号和数据
		InetAddress address=InetAddress.getByName("localhost");
		int port=8808;
		byte[] data="用户名:雅玲;密码:123".getBytes();
		// 2、创建DatagramPacket,用来包含发送端数据信息
		DatagramPacket packet=new DatagramPacket(data,data.length,address,port);
		// 3、创建DatagramSocket,用于数据发送
		DatagramSocket socket=new DatagramSocket();
		// 4、进行发送数据
		socket.send(packet);
		/*
		 * 接收服务器端响应的数据
		 */
		//1、创建一个数据报用于接收服务器端响应的数据
		byte[] data2=new byte[1024];
		DatagramPacket packet2=new DatagramPacket(data2,data2.length);
		//2、接收服务器端发送的数据信息
		socket.receive(packet2);
		//3、读取服务器端数据
		String reply=new String(data2,0,packet2.getLength());
		System.out.println("我是客户端,服务器说"+reply);
		//4、关闭资源
		socket.close();
	}

}

TCP编程

Socket通信

TCP协议是面向有连接的、可靠的、有序的,以字节流的方式发送数据。

基于TCP协议实现网络通信的类有:客户端的Socket类、服务器端的ServerSocket类

输入流:InputStream  输出端:OutputStream

 

 

Socket通信实现步骤

1、在服务器端和客户端分别完成ServerSocket和Socket的创建,这是实现网络通信的基础;

2、打开连接到Socket的输入/输出流,进行数据的通信;

3、按照协议对Socket进行读/写操作;

4、关闭输入输出流通信资源,关闭Socket。

服务器端实现步骤

1、创建ServerSocket对象,绑定监听端口;

2、通过accept()方法监听客户端请求;

3、连接建立后,通过输入流读取客户端发送的请求信息;

4、通过输出流向客户端发送响应信息;

5、关闭相关资源

public class TCPServer {

	public static void main(String[] args)  {
		try {
			// 1、创建ServerSocket对象,绑定并监听端口
			ServerSocket serverSocket=new ServerSocket(8818);
			System.out.println("********服务器即将启动,等待客户端的连接************");
			// 2、通过accept()监听客户请求,等待客户端的连接
			Socket socket=serverSocket.accept();
			// 3、获取输入流,并读取客户端的信息
			InputStream is=socket.getInputStream(); //字节输入流
			InputStreamReader isr=new InputStreamReader(is); //将字节流转换为字符流
			BufferedReader br=new BufferedReader(isr);//为输入流添加缓冲
			String info=null;
			while((info=br.readLine())!=null){//循环读取客户端的信息
				System.out.println("我是服务器,客户端说"+info);
			}
			socket.shutdownInput();//关闭输入流
			// 4、获取输出流,响应客户端的请求
			OutputStream oi=socket.getOutputStream();
			PrintWriter ph=new PrintWriter(oi);//将输出流转换为打印流
			ph.write("欢迎光临吖!");
			ph.flush();
			socket.shutdownOutput();//关闭输出流
			// 5、关闭相关资源
			oi.close();
			ph.close();
			br.close();
			isr.close();
			is.close();
			socket.close();
			serverSocket.close();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
				
		
	}

}

客户端实现步骤

1、创建Socket对象,指明需要连接的服务器的地址和端口号;

2、连接建立后,通过输出流向服务器端发送请求信息;

3、通过输入流获取服务器响应的信息;

4、关闭相关资源。

public class TCPClint {

	public static void main(String[] args) {
		try {
			// 1、创建Socket对象,指明需要连接的服务器的地址和端口号
			Socket socket=new Socket("localhost",8818);
			// 2、获取输出流,并向服务器发送请求
		OutputStream os=socket.getOutputStream();//输出字节流
		PrintWriter pw=new PrintWriter(os);// 将输出流转换为打印流
		pw.write("用户名:雅玲;密码:123");
		pw.flush();
		socket.shutdownOutput();//关闭输出流
		   // 3、通过输入流向服务器发送请求
		InputStream ih=socket.getInputStream();
		InputStreamReader ihr=new InputStreamReader(ih); //将字节流转换为字符流
		BufferedReader bh=new BufferedReader(ihr);//为输入流添加缓冲
		String info1=null;
		while((info1=bh.readLine())!=null){//循环读取服务器端的信息
			System.out.println("我是客户端,服务器说"+info1);
		}
		socket.shutdownInput();//关闭输入流
		   //4.关闭相关资源
		ih.close();
		ihr.close();
		bh.close();
		os.close();
		pw.close();
		socket.close();
		
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值