Java——UDP的简单传输

38 篇文章 1 订阅
本文介绍了Java中UDP的简单传输,包括发送和接收数据的步骤,强调了运行时应先启动接收方。同时,讨论了UDP传输的优化,并探讨了在同一个窗口中使用多线程实现发送和接收数据的方法。提供了发送端和接收端的代码示例。
摘要由CSDN通过智能技术生成

网络编程:用来实现网络互连的不同计算机上运行的程序可以进行数据交换
     1.UDP传输,运行时,先启动接收方(即先运行接收方),后运行发送方
         (1)发送Send
             1)创建DatagramSocket,随机端口号
             2)创建DatagramPacket,指定数据,长度,地址,端口
             3)使用DatagramSocket发送DatagramPacket
             4)关闭DatagramSocket
         (2)接受Receive
             1)创建DatagramSocket,指定端口号
             2)创建DatagramPacket,指定数组,长度
             3)使用DatagramSocket接收DatagramPacket
             4)关闭DatagramSocket
             5)从DatagramPacket中获取数据
         (3)接收方获取ip和端口号
             String ip=packet,getAddress().getHostAddress();
             int port=packet.getPort();
     2.UDP传输的优化

     3.UDP传输多线程:发送和接收在一个窗口完成

发送端代码

package pra_23;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;

public class J_42 {

	/**
	 * @param args
	 * @throws SocketException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws Exception {
		//发送端
		String str="qqqqqq";
		DatagramSocket socket=new DatagramSocket();
		DatagramPacket dp=
				new DatagramPacket(str.getBytes(),str.getBytes().length, InetAddress.getByName("127.0.0.1"),6666);
		socket.send(dp);			//把数据发出去
		socket.close();				//关闭
		//发送端的优化
		Scanner sc=new Scanner(System.in);
		DatagramSocket socket2=new DatagramSocket();
		while(true){
			String line=sc.nextLine();
			if("quit".equals(line)){
				break;
			}
			DatagramPacket packet2=
					new DatagramPacket(line.getBytes(),line.getBytes().length,InetAddress.getByName("127.0.0.1"), 6666);
			socket2.send(packet2);
			}
		socket2.close();
	}

}

接收端代码

package pra_23;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class J_43 {

	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		//接收端
		DatagramSocket ds=new DatagramSocket(6666);
		DatagramPacket dp=new DatagramPacket(new byte[1024], 1024);
		ds.receive(dp);
		byte[] arr=dp.getData();
		int len=dp.getLength();
		System.out.println(new String(arr,0,len));
		ds.close();
		
		//接收端优化
		DatagramSocket ds2=new DatagramSocket(6666);
		DatagramPacket dp2=new DatagramPacket(new byte[1024], 1024);
		while(true){
			ds2.receive(dp2);
			byte[] arr2=dp2.getData();
			int len2=dp2.getLength();
			String ip=dp2.getAddress().getHostAddress();
			int port=dp2.getPort();
			System.out.println(ip+":"+port+":"+new String(arr2,0,len2));
		}
	}

}

 

UDP传输多线程

package pra_23;

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

public class J_44 {
	public static void main(String[] args) throws Exception{
		new Receive().start();
		
		new Send().start();
	}
}
class Receive extends Thread{
	public void run(){
		try {
			DatagramSocket ds2=new DatagramSocket(6666);
			DatagramPacket dp2=new DatagramPacket(new byte[1024], 1024);
			while(true){
				ds2.receive(dp2);
				byte[] arr2=dp2.getData();
				int len2=dp2.getLength();
				String ip=dp2.getAddress().getHostAddress();
				int port=dp2.getPort();
				System.out.println(ip+":"+port+":"+new String(arr2,0,len2));
			}
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
}
class Send extends Thread{
	public void run(){
		try {
			Scanner sc=new Scanner(System.in);
			DatagramSocket socket2=new DatagramSocket();
			while(true){
				String line=sc.nextLine();
				if("quit".equals(line)){
					break;
				}
				DatagramPacket packet2=
						new DatagramPacket(line.getBytes(),line.getBytes().length,InetAddress.getByName("127.0.0.1"), 6666);
				socket2.send(packet2);
				}
			socket2.close();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值