-
UDP通信
2017-07-04 21:03:20 -
UDP 通信
2016-02-01 14:40:06不使用任何框架,最基础的UDP通信。 TCP不保证消息边界,但UDP保证消息边界。所以不用考虑拆包、黏包问题。 1.UDPServer java.net.DatagramSocket 代表UDP套接字。 java.net.DatagramSocket.DatagramSocket(int port...不使用任何框架,最基础的UDP通信。
TCP不保证消息边界,但UDP保证消息边界。所以不用考虑拆包、黏包问题。
1.UDPServer
java.net.DatagramSocket
代表UDP套接字。
java.net.DatagramSocket.DatagramSocket(int port)DatagramSocket的构造函数。
java.net.DatagramPacket
UDP的数据包。
java.net.DatagramPacket.DatagramPacket(byte[] buf, int length)DatagramPacket的构造函数。
void java.net.DatagramSocket.receive(DatagramPacket p)
收。
void java.net.DatagramSocket.send(DatagramPacket p)
发。2.UDPClient
java.net.DatagramSocket.DatagramSocket()
客户端的构造函数。
消息的收发同UDPServer。3.一套示例代码
server:
client:import java.io.*; import java.net.*; class UDPServer { public static void main(String[] args) throws IOException, InterruptedException { DatagramSocket server = new DatagramSocket(5050); byte[] recvBuf = new byte[100]; DatagramPacket recvPacket = new DatagramPacket(recvBuf, recvBuf.length); while (!Thread.currentThread().isInterrupted()) { server.receive(recvPacket); String recvStr = new String(recvPacket.getData(), 0, recvPacket.getLength()); System.out.println("UDPServer receieve:\t" + recvStr); int port = recvPacket.getPort(); InetAddress addr = recvPacket.getAddress(); String sendStr = "Hello ! I'm Server"; byte[] sendBuf=sendStr.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port); server.send(sendPacket); Thread.currentThread().sleep(500); } server.close(); } }
import java.io.*; import java.net.*; class UDPClient { public static void main(String[] args) throws IOException, InterruptedException { DatagramSocket client = new DatagramSocket(); String sendStr = "Hello! I'm Client"; byte[] sendBuf; sendBuf = sendStr.getBytes(); InetAddress addr = InetAddress.getByName("127.0.0.1"); int port = 5050; while (!Thread.currentThread().isInterrupted()) { DatagramPacket sendPacket = new DatagramPacket(sendBuf, sendBuf.length, addr, port); client.send(sendPacket); byte[] recvBuf = new byte[100]; DatagramPacket recvPacket = new DatagramPacket(recvBuf, recvBuf.length); client.receive(recvPacket); String recvStr = new String(recvPacket.getData(), 0, recvPacket.getLength()); System.out.println("UDPClient receieve:\t" + recvStr); Thread.currentThread().sleep(500); } client.close(); } }
-
Udp通信
2018-08-12 16:25:31Udp介绍 UDP — ⽤户数据报协议,是⼀个⽆连接的简单的⾯向数据报的运输层协 议。UDP不提供可靠性,它只是把应⽤程序传给IP层的数据报发送出去,但 是并不能保证它们能到达⽬的地。由于UDP在传输数据报前不⽤在客户...Udp介绍
UDP — ⽤户数据报协议,是⼀个⽆连接的简单的⾯向数据报的运输层协 议。UDP不提供可靠性,它只是把应⽤程序传给IP层的数据报发送出去,但 是并不能保证它们能到达⽬的地。由于UDP在传输数据报前不⽤在客户和服 务器之间建⽴⼀个连接,且没有超时重发等机制,故⽽传输速度很快。
UDP是⼀种⾯向⽆连接的协议,每个数据报都是⼀个独⽴的信息,包括完整 的源地址或⽬的地址,它在⽹络上以任何可能的路径传往⽬的地,因此能否 到达⽬的地,到达⽬的地的时间以及内容的正确性都是不能被保证的。UDP特点:
UDP是⾯向⽆连接的通讯协议,UDP数据包括⽬的端⼝号和源端⼝号信息, 由于通讯不需要连接,所以可以实现⼴播发送。 UDP传输数据时有⼤⼩限 制,每个被传输的数据报必须限定在64KB之内。 UDP是⼀个不可靠的协 议,发送⽅所发送的数据报并不⼀定以相同的次序到达接收⽅。
【适⽤情况】
UDP是⾯向消息的协议,通信时不需要建⽴连接,数据的传输⾃然是不可靠 的,UDP⼀般⽤于多点通信和实时的数据业务,⽐如
语⾳⼴播 视频 QQ TFTP(简单⽂件传送) SNMP(简单⽹络管理协议) RIP(路由信息协议,如报告股票市场,航空信息) DNS(域名解释)
注重速度流畅UDP操作简单,⽽且仅需要较少的监护,因此通常⽤于局域⽹⾼可靠性的分 散系统中client/server应⽤程序。例如视频会议系统,并不要求⾳频视频数据 绝对的正确,只要保证连贯性就可以了,这种情况下显然使⽤UDP会更合理 ⼀些。
udp⽹络程序-发送数据
创建⼀个udp客户端程序的流程是简单,具体步骤如下:
1. 创建客户端套接字
2. 发送/接收数据
3. 关闭套接字from socket import *
1. 创建套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)
2. 准备接收⽅的地址
sendAddr = (‘192.168.1.103’, 8080)
3. 从键盘获取数据
sendData = raw_input(“请输⼊要发送的数据:”)
4. 发送数据到指定的电脑上
udpSocket.sendto(sendData, sendAddr)
5. 关闭套接字
udpSocket.close()udp⽹络程序-发送、接收数据
- 创建udp⽹络程序-接收数据
coding=utf-8
from socket import *
1. 创建套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)
2. 准备接收⽅的地址
sendAddr = (‘192.168.1.103’, 8080)
3. 从键盘获取数据
sendData = raw_input(“请输⼊要发送的数据:”)
4. 发送数据到指定的电脑上
udpSocket.sendto(sendData, sendAddr)
5. 等待接收对⽅发送的数据
recvData = udpSocket.recvfrom(1024) # 1024表示本次接收的最⼤字节数
6. 显示对⽅发送的数据
print(recvData)
7. 关闭套接字
udpSocket.close()注意如果不绑定端口信息,那么每次运行网络程序,端口是不断变化的
udp绑定信息
⼀般情况下,在⼀天电脑上运⾏的⽹络程序有很多,⽽各⾃⽤的端⼝号很多 情况下不知道,为了不与其他的⽹络程序占⽤同⼀个端⼝号,往往在编程 中,udp的端⼝号⼀般不绑定
但是如果需要做成⼀个服务器端的程序的话,是需要绑定的
绑定示例
coding=utf-8
from socket import *
1. 创建套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)
2. 绑定本地的相关信息,如果⼀个⽹络程序不绑定,则系统会随机分配
bindAddr = (”, 7788) # ip地址和端⼝号,ip⼀般不⽤写,表示本机的任何⼀个ip udpSocket.bind(bindAddr)
3. 等待接收对⽅发送的数据
recvData = udpSocket.recvfrom(1024) # 1024表示本次接收的最⼤字节数
4. 显示接收到的数据
print recvData
5. 关闭套接字
udpSocket.close()⼀个udp⽹络程序,可以不绑定,此时操作系统会随机进⾏分配⼀个端⼝,如果重新运⾏次程序端⼝可能会发⽣变化
⼀个udp⽹络程序,也可以绑定信息(ip地址,端⼝号),如果绑定成 功,那么操作系统⽤这个端⼝号来进⾏区别收到的⽹络数据是否是此进 程的
udp总结
- udp是TCP/IP协议族中的⼀种协议能够完成不 同机器上的程序间的数据通信
- udp服务器、客户端
udp的服务器和客户端的区分:往往是通过 请求服务 和 提供服务 来进⾏ 区分 请求服务的⼀⽅称为:客户端 提供服务的⼀⽅称为:服务器 - udp绑定问题
⼀般情况下,服务器端,需要绑定端⼝,⽬的是为了让其他的客户端能 够正确发送到此进程 客户端,⼀般不需要绑定,⽽是让操作系统随机分配,这样就不会因为 需要绑定的端⼝被占⽤⽽导致程序⽆法运⾏的情况
-
UDP通信——使用python实现简单的UDP通信
2019-05-15 23:27:55使用python实现简单的UDP通信 UDP 的英文单词是User Datagram Protocol,缩写为UDP,是一种用户数据报协议,又称为用户数据报文协议,是一种报文的协议,是一个简单的面向数据报的传输层协议。UDP的发起和接受是不...UDP通信——使用python实现简单的UDP通信
UDP 的英文单词是User Datagram Protocol,缩写为UDP,是一种用户数据报协议,又称为用户数据报文协议,是一种报文的协议,是一个简单的面向数据报的传输层协议。UDP的发起和接受是不需要经过连接的,仅仅只需要发送在对应端口上进行监听接受即可,不需要两个客户端一定是连接的。
这里大家要区别的是:另一种常用的通信协议是TCP协议,两者的区别是TCP是面向连接的、传输可靠的,UDP是面向数据报的、不可靠的。它一旦把数据发送出去,就不保留备份数据,发出去的数据有没有被收到也不进行校验,容易丢包。
虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。下面是接收和发送端的程序代码:接收端 server.py
# -*- coding: utf-8 -*- import socket #导入socket模块 import time #导入time模块 #server 接收端 # 设置服务器默认端口号 PORT = 8000 # 创建一个套接字socket对象,用于进行通讯 # socket.AF_INET 指明使用INET地址集,进行网间通讯 # socket.SOCK_DGRAM 指明使用数据协议,即使用传输层的udp协议 server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) address = ("192.168.43.131", PORT) server_socket.bind(address) # 为服务器绑定一个固定的地址,ip和端口 server_socket.settimeout(10) #设置一个时间提示,如果10秒钟没接到数据进行提示 while True: #正常情况下接收数据并且显示,如果10秒钟没有接收数据进行提示(打印 "time out") #当然可以不要这个提示,那样的话把"try:" 以及 "except"后的语句删掉就可以了 try: now = time.time() #获取当前时间 # 接收客户端传来的数据 recvfrom接收客户端的数据,默认是阻塞的,直到有客户端传来数据 # recvfrom 参数的意义,表示最大能接收多少数据,单位是字节 # recvfrom返回值说明 # receive_data表示接受到的传来的数据,是bytes类型 # client 表示传来数据的客户端的身份信息,客户端的ip和端口,元组 receive_data, client = server_socket.recvfrom(1024) print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(now))) #以指定格式显示时间 print("来自客户端%s,发送的%s\n" % (client, receive_data)) #打印接收的内容 except socket.timeout: #如果10秒钟没有接收数据进行提示(打印 "time out") print "tme out"
发送端 client.py
# -*- coding: utf-8 -*- import socket import time #client 发送端 client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) PORT = 8000 while True: start = time.time() #获取当前时间 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(start))) #以指定格式显示当前时间 msg=raw_input("本客户端192.168.43.131,请输入要发送的内容:") server_address = ("192.168.43.131", PORT) # 接收方 服务器的ip地址和端口号 client_socket.sendto(msg, server_address) #将msg内容发送给指定接收方 now = time.time() #获取当前时间 run_time = now-start #计算时间差,即运行时间 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(now))) print("run_time: %d seconds\n" %run_time)
upd通信先打开server 或者 client 都可以。找到程序所在文件夹,在文件夹打开终端并输入命令
python client.py
运行程序,结果如图:
然后再打开一个终端,输入命令:python server.py
打开服务器。
然后就可以在客户端输入要发送的数据,结果如图:
如果想要一直发送相同的数据的话,就把client端的msg=raw_input("本客户端192.168.43.131,请输入要发送的内容:")
更改一下,比如:
msg=“This is a udp program...”
结果如图:
-
UDP通信——使用python通过UDP通信来发送和解析数据
2019-05-17 22:35:46UDP通信——使用python通过UDP通信来发送和解析数据 -
matlab gui UDP通信
2015-11-30 12:59:43matlab gui UDP通信实现matlab之间的UDP通信 -
MATLABUDP通信-matlab udp.rar
2019-08-12 21:52:57MATLABUDP通信-matlab udp.rar matlab如何实现UDP 进行数据通信, 这是我做的一个简单的程序,拿出来洒下; 第一次发贴,大家多支持。 -
QT5 UDP通信源码
2017-09-02 21:35:46QT5 UDP通信例子代码,对QT UDP通信感兴趣的同学,可以参考一下。 QT5 UDP通信例子代码,对QT UDP通信感兴趣的同学,可以参考一下。 -
udp通信协议-6轴平台
2020-09-25 01:22:116自由度udp通信协议,行业通用。和板卡通信,板卡与伺服器连接6自由度udp通信协议,行业通用。和板卡通信,板卡与伺服器连接6自由度udp通信协议,行业通用。和板卡通信,板卡与伺服器连接6自由度udp通信协议,行业... -
UDP通信类CUDP
2015-12-01 13:20:32一个udp通信的类,接收可以使用消息相应或回掉函数两种方式。在vs2008-vs2012,环境下测试通过。接收数据:支持消息响应和回调函数 -
MFC实现UDP通信
2017-12-27 09:09:28开发工具为vs2008,编程语言为C++,实现UDP通信,一个程序既可以作为服务器,也可以作为客户端 -
UDP通信——通过UDP进行转发
2019-05-16 01:02:07UDP通信——通过UDP通信进行数据转发 想象一下这样的应用场景:我要从设备A向设备B发送数据,B根据接收到的数据信息向设备C发送数据(当然不一定分别是3个不同的设备),如何用UDP通信实现呢? 可以由易到难的试验... -
通信与网络中的LabVIEW中的UDP通信
2020-11-16 23:39:36UDP通信不需要建立连接,也不需要进行端口侦听,所以在LabVIEW中使用UDP节点和Ⅵ实现UDP协议通信比TCP节点更为简单。UDP节点位于函数选板的“数据→通信→协议→>UDP”,如图所示。 如图2 UDP子选板 如表... -
UDP通信协议
2019-06-01 15:50:32UDP 通信分三种模式 :单播模式,组播模式,广播模式 UDP 单播通信的搭建步骤 : 1.创建UDP 的通信socket #include <sys/types.h> /* See NOTESw*/ #include < sys/socket.h> int socket ( int ... -
delphi Udp通信
2016-09-14 22:41:27delphi UDp通信