Java——UDP的简单传输

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zoweiccc/article/details/83038812

网络编程:用来实现网络互连的不同计算机上运行的程序可以进行数据交换
     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();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/zoweiccc/article/details/83038812