`
l4432848
  • 浏览: 250590 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

UDP和多线程服务器

    博客分类:
  • java
阅读更多

UDP:

UDP是数据报文传输协议,这个传输协议比较野蛮,发送端不需要理会接收端是否存在,直接就发送数据,不会像TCP协议一样建立连接。如果接收端不存在的话,发送的数据就会丢失,UDP协议不会去理会数据的安全性,而且在网络繁忙、堵塞的时候会丢失一些数据,俗称“丢包”。

但是UDP协议的传输速度很快,基本是你的网络有多快就传输多快。所以游戏、直播、语音电话等功能都是得靠UDP来实现 ,TCP都是基于UDP开发的,就是在UDP上增加了各种安全措施保护了数据的安全,牺牲了传输的速度。
UDP传输数据的方式是把数据分成一个个的数据包,每个包都会限制数据的大小。

学习UDP的传输,我们需要用到两个类:DatagramSocket和DatagramPacket类,和TCP里学过的不一样的一点是DatagramSocket既可以做接收端,也可以做发送端。接收端需要声明端口号,发送端则不需要声明ip地址和端口号。接收端会有一个空的数据包,用来接存储发送端发过来的数据。发送端则是将数据包装成一个数据包,然后声明对方的ip地址和端口号接着就能将数据发送过去了。
示意图
image

发送端代码示例:

image

接收端也可以限制IP的,设置成只接收某个IP的数据:

image

接收端代码示例:

image

运行结果:

image

多线程服务器:

到此之前我们编写的都是单线程的服务器端,单线程的服务器有一个坏处就是,在多人同时访问的时候会很缓慢。例如做个试验:在单线程的服务器端调用sleep方法让线程休眠3秒钟,然后运行服务器端,接着打开几个浏览器同时进行访问,会发现第一个浏览器停顿了3秒左右,第二个浏览器停顿了6秒左右,第三个浏览器停顿了9秒左右,这样以此类推的话速度实在太慢不忍直视。所以这时候就需要用到多线程来编写多线程服务器了,多线程就能同时的进行处理访问的客户端,而且在真正的开发中也不可能会用到单线程的服务器。

TCP多线程服务器代码示例:

image
image

运行结果:

image
image

UDP多线程服务器代码示例:

image
image

运行结果:

image
image

从运行结果可以看出来这种来一个线程开一个线程的方式的弊端,就是会开启无数个线程,导致资源占用很大。

线程池服务器:
所以这时候我们就需要用到线程池了,线程池能很好的管理线程资源,能够限制住不会导致资源占用很大。
TCP线程池服务器代码示例:

image
image

运行结果:

image
image

UDP线程池服务器代码示例:
image

运行结果:
image
image

从运行结果可以看出,使用线程池能够控制好线程的开启数量,从而不会导致线程的滥用,在计算机上的资源占用也就不会那么严重了。在开发中尽量使用线程池来编写多线程服务器,不使用线程池的话弊端很大。

0
0
分享到:
评论

相关推荐

    UDP异步多线程服务器和客户端程序

    在这个项目中,我们关注的是如何利用多线程技术和异步编程来构建一个高效的UDP服务器和客户端。 首先,异步通讯是提高系统性能的关键,特别是在处理大量并发连接时。在UDP服务器端,异步接收数据意味着服务器可以在...

    C# UDP多线程发送接收

    总结,C# UDP多线程通信是网络编程中的一个重要实践,它结合了UDP的高效传输特性和多线程的并发优势,适用于处理大量并发的网络请求。在实际项目中,开发者需要根据具体需求选择合适的同步机制,保证程序的稳定性和...

    UDP多线程IOCP服务器

    多线程IOCP服务器

    udp多线程例子

    【标签】"udp"、"多线程"、"并发"、"UDP多线程"、"服务器"进一步强调了这个主题的重点。并发是多线程的核心特性,允许服务器同时处理多个客户端连接。在UDP多线程场景中,每个线程可以处理一个单独的客户端连接,...

    QT下多线程 UDP socket示例

    QT下多线程UDP Socket示例是一个...通过这种方式,我们可以在QT环境下构建一个能够独立运行且不影响主界面的多线程UDP服务器。这个示例对于学习QT网络编程和多线程技术非常有帮助,可以应用于各种需要实时通信的场合。

    VS2017实现Udp socket多线程通信(C++)

    包括UDP服务器客户端多线程通信程序(用select实现),基于Visual Studio2017实现,已编译测试过,用到的朋友记得关闭SDL检查

    udp.rar_linux c语言 udp_udp 多线程_udp c语言 linux_udp linux

    总之,这个压缩包提供了一个在Linux环境中用C语言实现的UDP通信示例,包含客户端和服务器程序,且可能涉及多线程处理。这样的实践可以帮助开发者深入理解网络编程原理,特别是UDP协议和Linux环境下的C语言编程。

    udp 多线程实现多客户端并发,并采用链表实现服务器群发消息

    udp 多线程实现多客户端并发,并采用链表实现服务器群发消息。 udp多线程实现多客户端并发,并采用链表实现服务器群发消息 linux c multithread concurrency linklist

    UDP多线程服务器代码

    VC++6.0 UDP多线程编写,#include #include #include #include #include #pragma comment(lib,"ws2_32.lib") void workthread(LPVOID ipParam){ time_t tm; time(&tm;); printf("Server Thread %d started....

    udp多线程传输例子

    在"udp多线程传输例子"中,我们可以预期看到一个利用多线程进行UDP通信的程序示例。通常,这样的程序会包含以下几个关键部分: 1. **套接字创建**:在C++或Java等编程语言中,首先需要创建一个UDP套接字,这通过...

    c# UDP 多线程 多客户端传输例子

    总的来说,这个C# UDP多线程多客户端传输例子展示了如何利用C#的套接字类和多线程技术实现高效的UDP通信。服务端通过监听端口并为每个客户端创建独立的处理线程,确保了并发处理能力;客户端则通过多线程发送和接收...

    多线程UDP通讯例子

    总之,多线程UDP通信结合了UDP的高效性和多线程的并行性,使得程序能快速处理大量网络请求。理解和实现这样的通信机制对于开发高性能网络应用至关重要。通过阅读和分析给出的代码,我们可以深入学习和掌握这个主题。

    java的UDP多线程服务端和简单客户端

    在这个主题中,我们将详细探讨如何使用Java进行UDP多线程服务端和简单客户端的编程,以及如何通过IP识别不同的客户端。 首先,让我们了解一下UDP的基础知识。UDP是一种无连接的传输层协议,不保证数据的顺序、可靠...

    多线程UDP传送文件示例

    开发者可能使用这个库来创建多线程环境下的UDP客户端和服务器,每个线程负责一部分文件的数据传输。文件名列表中的"mmzmagic_PeerToPeer.gif"暗示了这是一个关于点对点(Peer-to-Peer, P2P)通信的例子,P2P网络中,每...

    udp多线程实现多客户端并发,并采用链表实现服务器群发消息

    通过上述方法,我们可以构建一个高效的UDP多线程服务器,能够处理大量并发客户端的请求,并利用链表结构实现服务器向所有客户端的群发消息功能。这种设计既满足了实时性需求,又保证了服务器的并发性能。

    UDP心跳线程线程函数

    5. **线程同步**:在多线程环境中,心跳线程函数需要考虑线程安全,避免与其他处理数据的线程产生冲突。这可能涉及到互斥锁(Mutex)、条件变量(Condition Variable)等同步原语。 6. **资源管理**:心跳线程需要...

    java udp 多线程实现简单的通信

    总之,这个Java UDP多线程通信项目展示了如何利用Java的网络编程API和多线程技术来构建一个基本的聊天应用。理解这些概念对于开发实时通信系统、物联网应用或其他需要高效、低延迟传输的场景非常重要。

    多线程的TCP和UDP通讯实例

    通过实际操作,开发者不仅可以理解TCP和UDP的区别,还能掌握如何在C++环境中实现多线程服务器,从而提高网络服务的性能和稳定性。对于初学者来说,这是一个很好的实践平台,有助于提升网络编程技能。

    c# Sokect多线程编程、UDP方式

    在UDP多线程编程中,服务器通常会开启一个线程来监听特定端口,当接收到数据时,会启动新的线程来处理接收到的数据,以避免单一线程处理多个请求时阻塞。`ClientTest`可能是实现UDP客户端的项目,它会创建`UdpClient...

    多线程UDP通讯程序源代码

    本资源提供的"多线程UDP通讯程序源代码"就是一个很好的实践案例,它涉及到计算机网络中的用户数据报协议(UDP)和多线程编程技术。以下是关于这两个关键知识点的详细解释: 1. **用户数据报协议(UDP)**: UDP是...

Global site tag (gtag.js) - Google Analytics