Java使用UDP协议传输信息

在网络编程当中,存在两大传输层协议,TCP和UDP。

那么传输协议有什么作用呢,我们都知道,计算机当中的信号只用0和1,传输信息也往往只用这两种信号传输。那么就需要用某种格式,来规范我们发出的信息。用送信来举例子的话,我们送一个邮件,除了信里面的内容以外,信还需要表明,这是要送给哪个小区的,这个小区的哪个人家的。对于计算机网络通信来说,这个数据包当中除了存储需要发送的信息以外,还要标注这个信息是要发给哪个小区,小区就好比是我们的计算机,我们使用IP地址来表明我们要发送到哪个计算机,然后呢,我们还需要表明这个信是哪个人的,是QQ的还是微信的啊,这个就是端口号。

TCP和UDP的区别

TCP是面向连接的服务,也就是说,在进行正式通信之前,必须确定已经和对方建立联系了,(TCP的三次通信嘛)特点是保证了数据的发送和接收同步,信息一定到了对方的手中,保证信息无差错,但是因为反复确认的原因,速度相对较慢。

UDP是面向非连接的协议服务,和TCP相比,UDP也不管接收方方不方便接收文件,反正我就按照数据包上写的地址把信息发过去了,最后信息是收到了还是丢了,还是信息阻塞卡掉了,发送方不知道,也不会管。这种传输方式特点是快速,适合用在网络游戏方面。

简单的使用UDP传输文件的代码:

Server.java

package udp;
import java.net.*;
public class Server
{
	public static void main(String [] args)throws Exception
	{
		byte[] container=new byte[1024*60];
		DatagramSocket server = new DatagramSocket(9999);
		DatagramPacket packet=new DatagramPacket(container,0,container.length);
		while (true)
		{
			server.receive(packet);
			byte[] datas=packet.getData();
			String message=new String(datas,0,packet.getLength());
			System.out.println(message);
			if (message.equals("bye")) break;
		}

		server.close();
	}
}

Client.java

package udp;
import java.net.*;
import java.io.*;
public class Client
{
	public static void main(String [] args)throws Exception
	{
		System.out.println("发送端启动");
		DatagramSocket client = new DatagramSocket(8888);
		BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
		while (true)
		{
			String data;
			data=in.readLine();
			byte[] datas = data.getBytes();
			DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",9999));
			client.send(packet);
			if (data.equals("bye")) break;
		}
		client.close();
	}
}

Java中的套接字传输类型为DatagramSocket,对于接收方的使用方法为:DatagramSocket client=new DatagramSocket(在本机开的端口);(无论是发送还是接收方都不会用到这个端口,这个端口有什么用,如果有大佬知道的话,希望能告诉我一下Orz)

DatagramPacket packet=new DatagramPacket(byte类型的数组,起始位置,终止位置,InetSocketAddress对象(存放着目的地的IP和接口号);

包裹里面封装的“信息”一定要转化成byte数组类型,在接收方我们可以使用String的构造函数转化回来,InetSocketAddress类型参数表明我们要发送的信息是送给哪个电脑的哪个端口号的,就类似信件上的地址,快递员不必大脑里面记住信息是发送给谁的,只要看一眼地址,按照地址往目的地跑就可以了。

Send发送方法

Receive接收方法,参数都是Datagrampacket类型的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值