How to implement UDP protocal
Server implementation
Open a socket on the server that listens to the UDP requests. (I’ve chosen 8888)
Make a loop that handles the UDP requests and responses
Inside the loop, check the received UPD packet to see if it’s valid
Still inside the loop, send a response to the IP and Port of the received packet
Client implementation
Open a socket on a random port.
Try to broadcast to the default broadcast address (255.255.255.255)
Loop over all the computer’s network interfaces and get their broadcast addresses
Send the UDP packet inside the loop to the interface’s broadcast address
Wait for a reply
When we have a reply, check to see if the package is valid
When it’s valid, get the package’s sender IP address; this is the server’s IP address
CLOSE the socket! We don’t want to leave open random ports on someone else’s computer
DatagramSocket
The Java DatagramSocket class represents a socket for sending and receiving datagram packets. It is a sending and receiving point for a packet delivery service where each packet is individually addressed and routed
Commonly used Constructors of DatagramSocket class
DatagramSocket() throws SocketEeption: it creates a datagram socket and binds it with the available Port Number on the localhost machine.
DatagramSocket(int port) throws SocketEeption: it creates a datagram socket and binds it with the given Port Number.
DatagramSocket(int port, InetAddress address) throws SocketEeption: it creates a datagram socket and binds it with the specified port number and host address.
DatagramPacket
This class provides facility for connection less transfer of messages from one system to another. Each message is routed only on the basis of information contained within the packet and it may be possible for different packets to route differently. There is also no guarantee as to whether the message will be delivered or not, and they may also arrive out of order. This class provides mechanisms for creation of datagram packets for connectionless delivery using datagram socket class.
Syntax :public DatagramPacket(byte[] buf,
int offset,
int length,
InetAddress address,
int port)
Parameters :
buf : byte array
offset : offset into the array
length : length of message to deliver
address : address of destination
port : port number of destination
Enumeration
The Enum in Java is a data type which contains a fixed set of constants.
Java Enums can be thought of as classes which have a fixed set of constatns. The Java enum constants are static and final implicitly
Enums are used to create our own data type like classes. The enum data type (also known as Enumerated Data Type) is used to define an enum in Java
NetworkInterface
A network interface is the point of interconnection between a device and any of its network connects
NetworkInterface nif = NetworkInterface.getByName("lo");
Enumeration<InetAddress> nifAddresses = nif.getInetAddresses();
Socket socket = new Socket();
socket.bind(new InetSocketAddress(nifAddresses.nextElement(), 0));
socket.connect(new InetSocketAddress(address, port));
We retrieve the network interface attached to lo first, retrieve the addresses attached to it, create a socket, bind it to any of the enumerated addresses which we don't even know at compile time and then connect.
A NetworkInterface object contains a name and a set of IP addresses assigned to it. So binding to any of these addresses will gurantee communication through this interface
InetAddress
Java InetAddress class represnets an IP address. InetAddress class provides methods to get the IP of any host name
https://jackiexie.com/2015/07/15/network-discovery-using-udp-broadcast-java/
How to implement UDP protocal的更多相关文章
- RFC3261--sip
本文转载自 http://www.ietf.org/rfc/rfc3261.txt 中文翻译可参考 http://wenku.baidu.com/view/3e59517b1711cc7931b716 ...
- socket编程函数
连接 TCP/IP协议规定网络数据传输应采用大端字节序 socket地址 struct sockaddr{ unsigned short sa_family; char sa_data[14]; }; ...
- 406 UDP协议是面向非连接的协议
HTTP The Definitive Guide Table 3-1. Common HTTP methods Method Description Message body? GET ...
- 406 UDP协议是面向非连接的协议 Keep-Alive
HTTP The Definitive Guide Table 3-1. Common HTTP methods Method Description Message body? GET ...
- [转]Objective-c中@interface、@implementation、@protocal
原处:http://blog.csdn.net/l271640625/article/details/8393531 以下Objective-c简称OC 从事java开发的程序员们都知道,在java中 ...
- twisted udp编程
概述 Unlike TCP, UDP has no notion of connections. A UDP socket can receive datagrams from any server ...
- Linux网络编程8——对TCP与UDP的简易封装
引言 每次使用socket通信,都会有很对相似的操作.本文,会对TCP与UDP通信做一简单封装,并生成动态库. 代码 my_socket.h #ifndef __MY_SOCKET_H__ #defi ...
- 详解TCP和UDP数据段的首部格式
TCP数据段的首部格式: 源端口号(16) 目的端口号(16) 序列号(32) 确认应答号(32) 数据偏移(4) 保留(6) 代码位(6) 窗口(16) 校验和(16) 紧急指针 选项(长度可变) ...
- ip头、tcp头、udp头详解及定义,结合Wireshark抓包看实际情况
公司的同事们在分析网页加载慢的问题,忽然使用到了Wireshark工具,我就像发现新大陆一样好奇,赶紧看了看,顺便复习了一下相关协议.上学时学的忘的差不多了,汗颜啊! 报文封装整体结构 mac帧头定义 ...
- 程序员必备基础知识:通信协议——Http、TCP、UDP
CP HTTP UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务. TCP HTTP UDP三者的关系: TCP/IP是个协议组,可分为四个层次: ...
随机推荐
- 【编程】Python3 使用自定义编码字符表解密Base64数据
前言 Python提供了"base64"模块用于编码.解码Base64数据.但是并不是所有的Base64数据都会使用默认的字符表进行编码,所以这里对Python下实现自定义编码字符 ...
- 【pyqtgraph】pyqtgraph可移动竖线LineSegmentROI的拖拽事件相关
情景 Python+PyQt+pyqtgraph读取数据绘图,并在图像上添加了LineSegmentROI带handle的竖线(hanlde是为了RectROI的拖动),现要实现竖线可以直接拖动,并在 ...
- 【python】第一模块 步骤五 第一课、内存管理机制
第一课.内存管理机制 一.课程介绍 1.1 课程概要 课程概要 赋值语句的内存分析 垃圾回收机制 内存管理机制 课程目标 掌握赋值语句内存分析方法 掌握id()和is()的使用 了解python的垃圾 ...
- sync同步工具使用
sync详解 sync概述: rsync是一个提供快速增量文件传输的开源工具.rsync在GNU通用公共许可证下免费提供,目前由Wayne Davison维护.传输前进行压缩,适合做备份使用. 命令格 ...
- Windows修改用户名
修改用户名 右键此电脑>>管理>>本地用户和组>>用户,找到要修改的用户,重命名 修改用户home目录名 1.激活管理员账号 右键此电脑>>管理> ...
- js 实现全屏预览(F11功能)--转
参考文档 http://t.zoukankan.com/ghfjj-p-6322415.html HTML代码 <body> <div id="content" ...
- VUE keepAlive缓存问题之动态使用exclude(会使用到VUEX)
exclude是啥? 官方解释: 怎么用呢? 处理的问题是什么?(答:返回首页的时候清除B页面的缓存) 我遇到的问题是: 一开始状态:A(首页). B(列表).C(列表中的详情)三个页面,设置B页面的 ...
- 【Unity】protobuf故意踩坑记
写在前面 起因:我看到工作项目使用protobuf来做序列化时脑子冒出许多问号,"以前我按<Unity3D网络游戏实战>做坦克游戏时为了让客户端和服务器使用统一协议用到了prot ...
- Leecode 206.反转链表(Java)
想法: 1.设链表长度为n,如5,头节点head,则最后一个元素位置为head-1. 错误,发现行不通,此为链表非数组,存储位置不连续 2.设两个指针p,q,让p,q指向head,再 ...
- pycharm安装包的简便方法