Server implementation

  1. Open a socket on the server that listens to the UDP requests. (I’ve chosen 8888)

  2. Make a loop that handles the UDP requests and responses

  3. Inside the loop, check the received UPD packet to see if it’s valid

  4. Still inside the loop, send a response to the IP and Port of the received packet

Client implementation

  1. Open a socket on a random port.

  2. Try to broadcast to the default broadcast address (255.255.255.255)

  3. Loop over all the computer’s network interfaces and get their broadcast addresses

  4. Send the UDP packet inside the loop to the interface’s broadcast address

  5. Wait for a reply

  6. When we have a reply, check to see if the package is valid

  7. When it’s valid, get the package’s sender IP address; this is the server’s IP address

  8. 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的更多相关文章

  1. RFC3261--sip

    本文转载自 http://www.ietf.org/rfc/rfc3261.txt 中文翻译可参考 http://wenku.baidu.com/view/3e59517b1711cc7931b716 ...

  2. socket编程函数

    连接 TCP/IP协议规定网络数据传输应采用大端字节序 socket地址 struct sockaddr{ unsigned short sa_family; char sa_data[14]; }; ...

  3. 406 UDP协议是面向非连接的协议

    HTTP The Definitive Guide   Table 3-1. Common HTTP methods   Method Description Message body?   GET ...

  4. 406 UDP协议是面向非连接的协议 Keep-Alive

    HTTP The Definitive Guide   Table 3-1. Common HTTP methods   Method Description Message body?   GET ...

  5. [转]Objective-c中@interface、@implementation、@protocal

    原处:http://blog.csdn.net/l271640625/article/details/8393531 以下Objective-c简称OC 从事java开发的程序员们都知道,在java中 ...

  6. twisted udp编程

    概述 Unlike TCP, UDP has no notion of connections. A UDP socket can receive datagrams from any server ...

  7. Linux网络编程8——对TCP与UDP的简易封装

    引言 每次使用socket通信,都会有很对相似的操作.本文,会对TCP与UDP通信做一简单封装,并生成动态库. 代码 my_socket.h #ifndef __MY_SOCKET_H__ #defi ...

  8. 详解TCP和UDP数据段的首部格式

    TCP数据段的首部格式: 源端口号(16) 目的端口号(16) 序列号(32) 确认应答号(32) 数据偏移(4) 保留(6) 代码位(6) 窗口(16) 校验和(16) 紧急指针 选项(长度可变) ...

  9. ip头、tcp头、udp头详解及定义,结合Wireshark抓包看实际情况

    公司的同事们在分析网页加载慢的问题,忽然使用到了Wireshark工具,我就像发现新大陆一样好奇,赶紧看了看,顺便复习了一下相关协议.上学时学的忘的差不多了,汗颜啊! 报文封装整体结构 mac帧头定义 ...

  10. 程序员必备基础知识:通信协议——Http、TCP、UDP

    CP HTTP UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务. TCP HTTP UDP三者的关系: TCP/IP是个协议组,可分为四个层次: ...

随机推荐

  1. 【Delphi11】「Embarcadero.Delphi.11.0.v28.0.42600.6491.Lite.v17.0分享」

    [Delphi11]转存或下载后将后缀名".exe"删除即可,或者直接右击解压缩也可.「Embarcadero.Delphi.11.0.v28.0.42600.6491.Lite. ...

  2. Linux命令之nc命令

    1.简介 nc是netcat的简写,是一个功能强大的网络工具,有着网络界的瑞士军刀美誉.nc命令在linux系统中实际命令是ncat,nc是软连接到ncat.nc命令的主要作用如下: 实现任意TCP/ ...

  3. 人森第一个iOS app,写给我家baby的!纪念一下

    用python写的,对于非专业iOS开发来说,py是个不错的选择,使用beeware框架,感觉和写前端差不多

  4. 【第4次作业】CNN实战

    使用VGG模型进行猫狗大战 import numpy as np import matplotlib.pyplot as plt import os import torch import torch ...

  5. idea创建maven + tomcat项目

    移动文件夹: 找到tomcat文件目录 配置完成,添加测试html文件: 运行 修改默认路径:

  6. 代码版本管理git

    git工作流程如下: 克隆 Git 资源作为工作目录. 在克隆的资源上添加或修改文件. 如果其他人修改了,你可以更新资源. 在提交前查看修改. 提交修改. 在修改完成后,如果发现错误,可以撤回提交并再 ...

  7. FtpClient上传文件异常:java.net.SocketException: Connection reset

    FtpClient上传文件异常:java.net.SocketException: Connection reset 这问题折磨我快一天了,下午这会儿终于解决了,问题不在程序错误,原因还是出在上传图片 ...

  8. 2021.01.08 oss is not defined

    背景: 视频点播使用阿里云的oss(Object storage services),然后总是报错oss is not defined, 在网上搜索了一些文章,基本上都是一模一样的,我也就不吐槽啦(这 ...

  9. vs2019配置boost库(转载)

    网址:https://blog.csdn.net/qq_42214953/article/details/105087015 关于途中的执行文件,可以使用b2.exe,不用跟着教程走. 如果本来就有b ...

  10. 修改百分浏览器(centbrowser)、谷歌和火狐浏览器默认字体的方法

    1,百分浏览器(centbrowser) 在浏览器的安装位置D:\Program Files\Cent Browser\User Data编辑文件custome.css,如果没有此文件可新建一个,内容 ...