欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于UDP协议的Socket编程

程序员文章站 2022-06-25 18:02:30
...
TCP的可靠保证,是它的三次握手机制,这一机制保证校验了数据,保证了他的可靠性。而UDP就没有了,所以不可靠。不过UDP的速度是TCP比不了的,而且UDP的反应速度更快,QQ就是用UDP协议传输的,HTTP是用TCP协议传输的。主要需要关注的还是TCP/IP协议的socket编程

下面是基于UDP协议写的客户端与服务端实现通信的代码。

第一步:写一个java project,一个client  一个Server


基于UDP协议的Socket编程
            
    
    博客分类: java基础 socketudp 


第二步骤:编写服务器端的代码如下:

package com.udp.socket.server;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import java.net.SocketException;

/**
 * 基于DUP协议的服务器端的代码
 * @author lfc
 *
 */
public class server {

	public static void main(String[] args) {
		try {
			// 1,创建服务器端,绑定端口
			DatagramSocket ds=new DatagramSocket(8800);
			// 2,确定接收数据包的数据的大小
			byte[] by=new byte[1024];
			// 3,创建接收数据包的数据类型,数据存储在数组中
			DatagramPacket dp=new DatagramPacket(by, by.length);
			// 4,通过套字节接收数据
			ds.receive(dp);
			// 5,解析客户端发送过来的数据
			String string=new String(by,0,dp.getLength());
			//打印来自客户端的信息		
			System.out.println("客户端发送过来的信息是:"+string);
			//当收到客户端发送过来的信息后,服务器端自动回答一个信息
			String hello="hello!";
			byte[] reply=hello.getBytes();
			//获取发送信息过来的客户端的ip地址
			SocketAddress sa=dp.getSocketAddress();
			//数据放入数据包中准备发送给客户端,三个参数,发送的内容,长度,以及客户端的ip地址
			DatagramPacket dp2=new DatagramPacket(reply,reply.length,sa);
			//发送给客户响应信息开始
			ds.send(dp2);
			// 6,关闭资源
			ds.close();
		} catch (SocketException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		
		

	}

}



第三步,编写客户端的代码如下:

package com.udp.socket.client;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;



/**
 * 基于UDP协议的客户端代码
 * 
 * @author lfc
 * 
 */
public class client {

	public static void main(String[] args) {
		
		// 1,创建客户端,确定发送到服务器端的ip以及端口
		String info="你好,在吗?";
		byte[] by=info.getBytes();
		InetAddress ia=null;
		try {
			ia=InetAddress.getByName("localhost");
		} catch (UnknownHostException e) {
			
			e.printStackTrace();
		}
		// 2,创建数据包,指定数据包的长度并且发送到服务器ip的指定端口
		int port=8800;
		DatagramPacket dp=new DatagramPacket(by, by.length,ia,port);
		// 3,创建DatagramSocket对象
		DatagramSocket ds=null;
		try {
			 ds=new DatagramSocket();
		} catch (SocketException e) {
			
			e.printStackTrace();
		}
		// 4,向服务器发送数据包
		try {
			ds.send(dp);
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		byte[] receive=new byte[1024];
	   //客户端创建接收数据包的数据类型,数据存储在数组中
		DatagramPacket dpre=new DatagramPacket(receive, receive.length);
		// 客户端通过套字节接收数据
		try {
			ds.receive(dpre);
		} catch (IOException e) {
			
			e.printStackTrace();
		} 
		//输出服务器给客户端的响应信息
		String string=new String(receive,0,receive.length);
		System.out.println("服务器响应的信息是:"+string);
		// 5,关闭资源
		ds.close();
		
	}

}



第四步:运行服务器端的代码,控制台显示处于监听状态:结果如下图

基于UDP协议的Socket编程
            
    
    博客分类: java基础 socketudp 



第五步,运行客户端的代码,此时服务端收到客户端发送过来的信息:


基于UDP协议的Socket编程
            
    
    博客分类: java基础 socketudp 

我们再去查看客户端的控制台,发现控制台输出服务器端发送过来的响应信息:


基于UDP协议的Socket编程
            
    
    博客分类: java基础 socketudp 


  • 基于UDP协议的Socket编程
            
    
    博客分类: java基础 socketudp 
  • 大小: 9.4 KB
  • 基于UDP协议的Socket编程
            
    
    博客分类: java基础 socketudp 
  • 大小: 6.9 KB
  • 基于UDP协议的Socket编程
            
    
    博客分类: java基础 socketudp 
  • 大小: 11.4 KB
  • 基于UDP协议的Socket编程
            
    
    博客分类: java基础 socketudp 
  • 大小: 10.6 KB
相关标签: socket udp