java使用UDP协议传输数据

UDP协议(User Datagram Protocol,用户数据报协议)不同于TCP协议,它是不可能靠的,但是它比TCP协议具有更快的传输速度,UDP发送的数据单元称为数据报,当网络传输UDP传输UDP数据报是无法保证数据能够到达目的地,也无法保证按发送的顺序到达目的地,也就是说先发送了“hello”,再发送了“world”,但接收方可能会先收到“world”,再收到“hello”,也有可能收不到数据,为什么呢?因为它是不可能靠的,在传输途中可能丢失了。但UDP比TCP跟适合与传输实时音频。下面是一个简单的UPD传输数据报的例子

服务器端:

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

public class EchoServer {

	private DatagramSocket datagramSocket;

	private final int port = 8088;

	public static void main(String[] args) throws SocketException {
		new EchoServer().service();
	}

	public EchoServer() throws SocketException{
		datagramSocket = new DatagramSocket(port);
		System.out.println("服务器启动");
	}

	public String echo(String msg){
		return "echo:"+msg;
	}

	public void service(){
		while (true) {
			try {
				DatagramPacket packet = new DatagramPacket(new byte[512], 512);
				datagramSocket.receive(packet);
				String msg = new String(packet.getData(), 0, packet.getLength());
				System.out.println(packet.getAddress()+"/"+packet.getPort()+" msg:"+msg);
				packet.setData(echo(msg).getBytes());
				datagramSocket.send(packet);
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
	}

}

客户端:

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

public class EchoClient {

	private String remoteHost="localhost";
	private int remotePort=8088;
	private DatagramSocket datagramSocket;

	public EchoClient() throws SocketException{
		datagramSocket = new DatagramSocket();
	}

	public static void main(String[] args) throws SocketException {
		new EchoClient().talk();
	}

	public void talk(){
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
			String msg = null;
			InetAddress address = InetAddress.getByName(remoteHost);
			while ((msg=reader.readLine())!=null) {
				//发送数据报
				byte [] buffer = msg.getBytes();
				DatagramPacket packet = new DatagramPacket(buffer,buffer.length, address, remotePort);
				datagramSocket.send(packet);
				//接收数据报
				DatagramPacket inputPacket = new DatagramPacket(new byte[512], 512);
				datagramSocket.receive(inputPacket);
				System.out.println(new String(inputPacket.getData(), 0 , inputPacket.getLength()));
				if("bye".equals(msg)){
					break;
				}
			}

		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			datagramSocket.close();
		}
	}

}

java使用UDP协议传输数据,码迷,mamicode.com

时间: 2024-10-06 20:09:59

java使用UDP协议传输数据的相关文章

JAVA的UDP协议交互信息

由于要做app的UDP协议交互,所以就特地学习了下,其实也就类似于java的server和socket,下面就写了个简单的demo 服务端: package com.test1; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException;

Java中UDP协议的基本原理和简单用法

UDP协议是非面向连接的,相对于TCP协议效率较高,但是不安全.UDP协议类似发信息的过程,不管接收方是在线还是关机状态,都会把信息发送出去.但是如果接收方不处于接收信息的状态,发送出去的数据包就会丢失. convert()方法是用来转换字节数组和基本类型. /** * 创建基于udp协议的服务接受端 * @author wxisme * */ public class MyServer { public static void main(String[] args) throws IOExce

Java之UDP协议 发送与接收简单实现代码

SendDemo: package com.renhongwei.demo_01; 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数据发送端 */

java实现UDP协议传输DatagramSocket

摘自:http://blog.csdn.net/wintys/article/details/3525643/ Server端. package com.topca.server; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UDPServer { public static

udp协议基础(转自疯狂java讲义)

第17章  网络编程 17.4  基于UDP协议的网络编程 UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象.Java提供了DatagramSocket对象作为基于UDP协议的Socket,使用DatagramPacket代表DatagramSocket发送.接收的数据报. 17.4.1  UDP协议基础 UDP协议是英文User Datagram Protocol的缩写,即用户数据报

12.2-全栈Java笔记: TCP协议和UDP协议

 区别 在网络通讯中,TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据.而UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得. 这两种传输方式都是实际的网络编程中进行使用,重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则都通过UDP方式进行传递,在一些程序中甚至结合使用这两种方式进行数据的传递. 由于TCP需

java基础知识回顾之java Socket学习(一)--UDP协议编程

UDP传输:面向无连接的协议,不可靠,只是把应用程序传给IP层的数据报包发送出去,不保证发送出去的数据报包能到达目的地.不用再客户端和服务器端建立连接,没有超时重发等机制,传输速度快是它的优点.就像寄信,写好信放到邮箱桶里面,既不能保证信件在邮递过程中不丢失,也不能保证信件是按顺序寄到目的地的. 看java API用到java.net.DatagramSocket和java.net.DatagramPacket类: DatagramSocket:此类表示用来发送和接收数据报包的套接字(IP地址和

JAVA基础知识之网络编程——-基于UDP协议的通信例子

UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramSocket类的receive和send方法即可,但消息需要通过一个特定的类封装(DatagramPacket) 下面是一个基于UDP协议的通信的例子, 服务器端, 1 package udp; 2 3 import java.io.IOException; 4 import java.net.Dat

Java中的UDP协议编程

一. UDP协议定义   UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层,处于IP协议的上一层.UDP有不提供数据报分组.组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的. 二. 使用UDP的原因 它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频.视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包, 也不会对接收结果产生太大影响.比如我们聊天用的ICQ和O