UDP网络编程

本文提供了三个UDP通信的具体实例,包括简单的数据发送与接收、交互式消息传输及多线程聊天室应用,详细展示了如何使用Java进行UDP编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UDP实例一:

package com.nbchina.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpRece {
	public static void main(String[] args) throws Exception{
		//1、创建udp服务。通过DatagramSocket对象。监听10000端口
		DatagramSocket ds = new DatagramSocket(10000);
		//2、确定数据,用户储存数据
		byte[] buf = new byte[1024];
		
		DatagramPacket dp = new DatagramPacket(buf,buf.length);
		//3、通过socket服务,receive方法将收到的数据存入数据包中
		ds.receive(dp);
		
		//4.通过数据包的方法获取其中所要数据
		String ip=dp.getAddress().getHostAddress();
		String data = new String(dp.getData(),0,dp.getLength());

		int port = dp.getPort();
		
		System.out.println(ip+"::"+data+"::"+port);
		
		ds.close();

		
	}

}



package com.nbchina.net;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpSend {
	public static void main(String[] args) throws Exception{
		//1、创建udp服务。通过DatagramSocket对象。端口不填,随机。填写,则发送端口确定
		DatagramSocket ds = new DatagramSocket(8888);
		//2、确定数据,并封装成数据包DatagramPacket(byte[] buf,int length,InetAddress address,int port)
		byte[] buf = "udp data send...".getBytes();
		
		DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.8"),10000);
		//3、通过socket服务,将已有数据发送出去
		ds.send(dp);

		//4、关闭资源
		ds.close();

		
	}

}

UDP实例二

package com.nbchina.net2;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpRece {
	public static void main(String[] args) throws Exception{
		//1、创建udp服务。通过DatagramSocket对象。监听10000端口
		DatagramSocket ds = new DatagramSocket(10000);
		int i=1;
		while(true){
			byte[] buf = new byte[1024];
			
			DatagramPacket dp = new DatagramPacket(buf,buf.length);
			//3、通过socket服务,receive方法将收到的数据存入数据包中
			//receive阻塞住程序运行。
			ds.receive(dp);
			
			//4.通过数据包的方法获取其中所要数据
			String ip=dp.getAddress().getHostAddress();
			String data = new String(dp.getData(),0,dp.getLength());

			int port = dp.getPort();
			
			System.out.println("["+i+"]"+ip+":"+port+"--"+data);
			i++;
		}
		//2、确定数据,用户储存数据

		
		//ds.close();

		
	}

}




package com.nbchina.net2;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpSend {
	public static void main(String[] args) throws Exception{
		//1、创建udp服务。通过DatagramSocket对象。端口不填,随机。填写,则发送端口确定
		DatagramSocket ds = new DatagramSocket(8888);
		
		BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
		
		String line = null;
		
		while((line=bufr.readLine())!=null){
			if("886".equals(line))
				break;
			byte[] buf = line.getBytes();
			
			DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.8"),10000);
			
			ds.send(dp);
		}
		ds.close();
		
	}

}

UDP实例三----多线程聊天室

package com.nbchina.chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpChat {
	public static void main(String[] args) throws Exception{
		DatagramSocket ss = new DatagramSocket(9999);
		DatagramSocket rs = new DatagramSocket(10003);
		new Thread(new Send(ss)).start();
		new Thread(new Rece(rs)).start();
	}
}

class Send implements Runnable{
	private DatagramSocket ds;
	public Send(DatagramSocket ds){
		this.ds = ds;
	}

	public void run() {
		try{
			BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
			
			String line = null;
			
			while((line=bufr.readLine())!=null){
				if("886".equals(line))
					break;
				byte[] buf = line.getBytes();
				
				DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.8"),10003);
				
				ds.send(dp);
			}
		}catch(Exception e){
			throw new RuntimeException("发送端异常");
		}
	}
}

class Rece implements Runnable{
	private DatagramSocket ds;
	public Rece(DatagramSocket ds){
		this.ds = ds;
	}

	public void run() {
		try{
			int i=1;
			while(true){
				byte[] buf = new byte[1024];
				
				DatagramPacket dp = new DatagramPacket(buf,buf.length);
				ds.receive(dp);
				
				String ip=dp.getAddress().getHostAddress();
				String data = new String(dp.getData(),0,dp.getLength());

				int port = dp.getPort();
				
				System.out.println("["+i+"]"+ip+":"+port+"--"+data);
				i++;
			}
		}catch(Exception e){
			throw new RuntimeException("发送端异常");
		}

	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值