`

udp connect 总结

udp 
阅读更多
最近在写健康检查的插件,udp的检查打算用connect 来做,总结一下udp 判断对端服务器是否在监听对应端口的方法:

单纯判断connect 的返回值无法判断对端服务器是否在监听,因为connect 只是让内核永久维护一个存储对端地址信息的数据结构
并不会像tcp 一样去与对端服务器发生通讯,tcpdump 抓包是没有任何数据包的

connect + send 也无法判断对端服务器是否在监听端口,tcpdump 抓包能抓到icmp unreachable,但是应用层没有相关错误信息,send的返回值是正确的,用getsockopt获取socket的状态也是正确的

connect + send +recv 可以判断对端服务器是否在监听对应的端口,但是会存在以下问题,
阻塞模式下:对端服务器有在监听对应端口的话,recv 一直不会返回;对端服务如果没有在监听对应端口的话,recv会返回unreachable的错误,表明网络不可达
非阻塞模式下:无论对端服务器是否在监听端口,recv 会马上返回Resource temporarily unavailable ;尝试用while 一直recv ,如果对端服务器有在监听对应端口的话,无法判断退出时间;对端服务器要是没有在监听对应端口的话,可以通过错误码来判断,退出while;

最后决定用connect +send+recv 来实现,并且通过setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv),来指定recv的timeout
分享到:
评论

相关推荐

    sock5 udp 透传 总结

    2. **UDP支持**:在配置文件中启用`socks5`模块,并在`udp_pass`或`udp_connect`选项中指定允许的UDP端口范围。 3. **认证设置**:根据需求选择合适的认证机制,如匿名、用户名密码认证等。 4. **启动服务**:使用...

    UDP.rar_as3 udp_flash as3.0 UDP_flash发送udp_udp as3_windows as3.0

    总结来说,这个"UDP.rar"压缩包中的"UDP.fla"文件很可能是为了展示如何在AS3环境中使用UDP进行通信,这对于开发实时互动的Flash应用,如多人在线游戏或音视频流媒体服务,具有重要的学习价值。通过解析和运行这个...

    Qt_UDP通信,qt实现udp通信,C,C++

    总结,Qt提供了一套完整的API,使得开发者可以方便地在C++环境中实现UDP通信。通过理解并运用这些API,你可以创建高效且功能丰富的UDP通信应用程序,无论是简单的文本消息交换还是复杂的文件传输。

    STM32实现UDP

    udp_connect(udppcb, &remote_ip, UDP_DEMO_PORT); // 设置连接成功标志位 udp_flag |= 0x20; } ``` 发送数据: ```c void udp_send_data(const char *data) { // 创建pbuf并填充数据 struct pbuf *p = ...

    libuv关于TCP UDP以及文件操作的封装测试

    总结来说,这个项目主要展示了libuv如何封装TCP、UDP网络通信和文件操作,以便在实际应用中高效、可靠地处理这些任务。通过理解和实践这些基本操作,开发者能够更好地利用libuv构建高性能的跨平台应用程序。

    基于udp的winsock通信

    总结,基于UDP的Winsock通信在VB中主要是通过设置Winsock控件的相关属性,监听和处理`Receive`事件,以及使用`SendData`方法发送数据。由于UDP的特性,开发者需要额外处理数据的可靠性、顺序性和错误恢复等问题。在...

    基于UDP协议通信的简单客户端/服务器

    客户端则需要知道服务器的IP地址和端口号,然后使用`UdpClient.Connect()`方法指定服务器的信息。向服务器发送数据可以调用`UdpClient.Send()`方法,接收数据则可以同样利用`ReceiveAsync()`方法,不过通常客户端会...

    UDP简单通信程序

    总结来说,C#中的UDP通信主要通过`UdpClient`类实现,包括创建对象、设置远程IP和端口、发送和接收数据等步骤。在实际开发中,还需要关注错误处理、并发控制以及网络安全性等方面的问题,以确保程序的稳定性和可靠性...

    WPF框架下UDP通讯

    udpClient.Connect("服务器IP地址", 服务器端口); ``` 这里的"服务器IP地址"和"服务器端口"是你希望连接的UDP服务器的地址和端口号。 **发送数据:** ```csharp byte[] data = Encoding.UTF8.GetBytes("要发送的...

    C#编写上位机使用UDP给单片机发送Json格式数据

    在本文中,我们将深入...总结,使用C#编写上位机并利用UDP向单片机发送Json数据涉及到了网络编程的基本概念,Json序列化,以及对无连接协议的理解。通过熟练掌握这些知识点,你可以构建出高效、可靠的设备通信系统。

    C/C++ 发送UDP数据与接收UDP数据完整代码(支持指定网卡)

    总结来说,这个代码片段提供了在Linux系统下使用C++进行UDP单播和组播通信的解决方案,通过封装成类的方式提高了代码的可重用性和可维护性。理解并应用这些知识点对于开发涉及网络通信的C++应用程序至关重要。

    UDP通讯 c#与labview源码

    首先,创建一个UdpClient实例,然后调用其Connect方法指定远程IP地址和端口号。发送数据时,可以使用Send方法,接收数据则使用Receive方法。注意,由于UDP是无连接的,所以Receive方法可能会接收到任何源地址的数据...

    c# UDP 局域网异步通讯实现广播,接收发送string数据

    udpClient.Connect("255.255.255.255", 1234); // 设置广播地址和端口号 byte[] data = Encoding.UTF8.GetBytes("Hello, Broadcast!"); // 将字符串转换为字节数组 udpClient.BeginSend(data, data.Length, new ...

    LWIP裸机实现TCPUDP通讯

    总结,LWIP裸机实现TCP/UDP通信涉及网络协议栈的配置、硬件驱动的开发、TCP与UDP协议的实现以及错误处理等多个方面。理解这些概念并实践操作,可以让你在没有操作系统支持的环境下构建可靠的网络通信系统。

    Java DataGramSocket的Connect方法问题

    总结来说,Java中的DataGramSocket类的`connect()`方法是对无连接的UDP协议的一种模拟,它允许我们设置一个默认的发送和接收目标,而不是建立一个真正的连接。理解和正确使用这个方法可以帮助我们在编写UDP程序时...

    MyQQ.rar_CSharp udp_UDP CSharp _udp 发送消息_udp通讯

    总结,通过C#实现基于UDP的通信,能够构建一个简单但高效的聊天系统。不过需要注意的是,由于UDP的特性,这种系统可能不适合对数据完整性要求极高的场景。在实际应用中,需要根据需求权衡性能与可靠性的平衡。

    udp程序,客户端和服务器端

    总结,`udp_server.c` 和 `udp_client.c` 是实现 UDP 通信的基础组件。通过理解和调试这些代码,我们可以更好地掌握 UDP 协议的工作原理,以及如何在实际应用中有效地利用它。在开发过程中,确保对网络环境、数据包...

    c# udp server and client

    总结,C# UDP服务器和客户端的实现涉及到网络编程基础,包括套接字操作、数据编码解码以及异步通信。在Windows Mobile设备上运行时,需要考虑平台特性和兼容性问题。通过以上步骤,你可以创建一个简单的C# UDP通信...

    Udp简单收发器

    2. 设置发送数据的目标地址和端口,可以使用`Connect`方法预先指定,或者在每次发送时传递给`Send`方法。 3. 使用`Send`方法发送数据,确保数据已经转换为字节数组。 4. 使用`Receive`或`BeginReceive`方法接收数据...

    C# socket(udp),定时器

    总结起来,C#中的Socket和UDP结合使用可以实现高效、实时的网络通信。通过`UdpClient`类创建UDP客户端,并结合`Timer`类,我们可以轻松地构建一个定时发送数据的客户端应用。这在许多需要持续性、低延迟通信的场景中...

Global site tag (gtag.js) - Google Analytics