UDP和多线程服务器
UDP:
UDP是数据报文传输协议,这个传输协议比较野蛮,发送端不需要理会接收端是否存在,直接就发送数据,不会像TCP协议一样建立连接。如果接收端不存在的话,发送的数据就会丢失,UDP协议不会去理会数据的安全性,而且在网络繁忙、堵塞的时候会丢失一些数据,俗称“丢包”。
但是UDP协议的传输速度很快,基本是你的网络有多快就传输多快。所以游戏、直播、语音电话等功能都是得靠UDP来实现 ,TCP都是基于UDP开发的,就是在UDP上增加了各种安全措施保护了数据的安全,牺牲了传输的速度。 UDP传输数据的方式是把数据分成一个个的数据包,每个包都会限制数据的大小。
学习UDP的传输,我们需要用到两个类:DatagramSocket和DatagramPacket类,和TCP里学过的不一样的一点是DatagramSocket既可以做接收端,也可以做发送端。接收端需要声明端口号,发送端则不需要声明ip地址和端口号。接收端会有一个空的数据包,用来接存储发送端发过来的数据。发送端则是将数据包装成一个数据包,然后声明对方的ip地址和端口号接着就能将数据发送过去了。 示意图: 
发送端代码示例:

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

接收端代码示例:

运行结果:

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

运行结果:

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

运行结果:

从运行结果可以看出来这种来一个线程开一个线程的方式的弊端,就是会开启无数个线程,导致资源占用很大。
线程池服务器: 所以这时候我们就需要用到线程池了,线程池能很好的管理线程资源,能够限制住不会导致资源占用很大。 TCP线程池服务器代码示例:

运行结果:

UDP线程池服务器代码示例: 
运行结果:

从运行结果可以看出,使用线程池能够控制好线程的开启数量,从而不会导致线程的滥用,在计算机上的资源占用也就不会那么严重了。在开发中尽量使用线程池来编写多线程服务器,不使用线程池的话弊端很大。
UDP和多线程服务器的更多相关文章
- UDP数据接收服务器
简介 这是我在做一个要用UDP方式进行数据传输时,自己写的一个多线程的UDP数据接收服务器, 它能将接收到的UDP数据包存成文件,并提供数据包接收时间监测: 还支持键盘命令响应,以将数据写到新的文件, ...
- TCP粘包/拆包 ByteBuf和channel 如果没有Netty? 传统的多线程服务器,这个也是Apache处理请求的模式
通俗地讲,Netty 能做什么? - 知乎 https://www.zhihu.com/question/24322387 谢邀.netty是一套在java NIO的基础上封装的便于用户开发网络应用程 ...
- 【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)
RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [ ...
- 基于事件的 NIO 多线程服务器--转载
JDK1.4 的 NIO 有效解决了原有流式 IO 存在的线程开销的问题,在 NIO 中使用多线程,主要目的已不是为了应对每个客户端请求而分配独立的服务线程,而是通过多线程充分使用用多个 CPU 的处 ...
- C# TCP多线程服务器示例
前言 之前一直很少接触多线程这块.这次项目中刚好用到了网络编程TCP这块,做一个服务端,需要使用到多线程,所以记录下过程.希望可以帮到自己的同时能给别人带来一点点收获- 关于TCP的介绍就不多讲,神马 ...
- Java如何创建多线程服务器?
在Java编程中,如何创建多线程服务器? 以下示例演示如何使用ServerSocket类的MultiThreadServer(socketname)方法和Socket类的ssock.accept()方 ...
- 基于多进程和基于多线程服务器的优缺点及nginx服务器的启动过程
基于多进程服务器的优点: 1.由操作系统进行调度,运行比较稳定强壮 2.能够方便地通过操作系统进行监控和管理 例如对每个进程的内存变化状况,甚至某个进程处理什么web请求进行监控.同时可以通过给进程发 ...
- 用Java实现多线程服务器程序
一.Java中的服务器程序与多线程 在Java之前,没有一种主流编程语言能够提供对高级网络编程的固有支持.在其他语言环境中,实现网络程序往往需要深入依赖于操作平台的网络API的技术中去,而Java提供 ...
- Linux网络编程echo多线程服务器
echo_server服务器多线程版本 #include <unistd.h> #include <stdlib.h> #include <stdio.h> #in ...
随机推荐
- Python教程(2.7)——条件分支
像其它语言一样,Python也有条件分支. 例如,输入用户年龄,可能需要判断是否成年,并做出不同反应.这就需要用到条件分支. if条件分支 if条件分支的一般格式如下: if condition: s ...
- Java经典编程题50道之二十六
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母. public class Example26 { public static void main(Stri ...
- shiro开发,shiro的环境配置(基于spring+springMVC+redis)
特别感谢lhacker分享的文章,对我帮助很大 http://www.aiuxian.com/article/p-1913280.html 基本的知识就不在这里讲了,在实战中体会shiro的整体设计理 ...
- Spring学习(18)--- AOP基本概念及特点
AOP:Aspect Oriented Programing的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序程序功能的统一维护的一种技术 主要的功能是:日志记录,性能统计,安全控制, ...
- javascriptDOM节点
DOM把层次中的每一个对象都称之为节点(NODE),以HTML超文本标记语言为例:整个文档的一个根就是<html>,在DOM中可以使用 document.documentElement来访 ...
- Shiro眼皮下玩ajax,玩出302 Found(实践得经验)
2017/06/14这一天,是我玩Shiro安全框架最刻骨铭心的一天.因为Shiro今天给我深深的补了一刀,在这儿我也给各位补一刀吧,其实问题很简单,解决方式也极其简单,只是给各位分享一下这个错误,纯 ...
- TestNG+ExtentReports生成超漂亮的测试报告
一个优雅.漂亮的测试报告,能够给我们的测试工作带来不少的加分,而报告的模版实在是让我们这些技术人员头疼的问题,设计的实在是没有什么美感. 那么今天就给大家分享一个自动化测试中,一个超漂亮的测试报告模版 ...
- 本地存储 web storage
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Java NIO学习笔记七 Non-blocking Server
Java NIO:Non-blocking Server 即使你了解了Java NIO非阻塞功能的工作(怎么样Selector,Channel, Buffer等等),设计一个无阻塞服务器仍然很难.非阻 ...
- C++ 安全单例模式总结
前两天,一个C++ 的单例实现又掉坑里了.做好一个安全的单例模式可并不简单.这里总结一下C++ 的几个单例实现方案. 1. 函数静态变量法 利用单例函数的静态变量,实现单例构造.代码如下: class ...