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 ...
- VMware 创建多台Linux机器并配置IP
1.查看并分配虚拟网络 我们首先要知道 VMware 三种网络模式的区别. ①.Bridged(桥接模式):就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信.在桥接的作用下,类似于把物理主机虚拟为 ...
- js 排序:sort()方法、冒泡排序、二分法排序。
js中的排序,这里介绍三种,sort()方法.冒泡排序.二分法排序. 1.sort方法 写法: 数组.sort(); 返回排好序的数组,如果数组里是数字,则由小到大,如果是字符串,就按照第一个字符的 ...
- 平面之后3D成主流?VR全景表示不服!——全景智慧城市常诚
目前很多人对VR全景这个词汇没有明确的概念,更没有人做过全面的研究,VR全景是什么?VR全景可以做什么?不同于我们经常听到的VR色情,全景智慧城市常诚今天就来为各位做一个系统全面的介绍,深入了解之后, ...
- 模拟对象测试——EasyMock
一.EasyMock 使用动态代理实现模拟对象创建,一般可以满足以下测试需求 1.要测试的模块依赖于其它自己控制不了的模块,如第三方服务,其它组员在开发的服务等,它们都没办法配合你来测试: 2.涉及到 ...
- cordova 插件开发
从事基于cordova开发混合APP也快一年了,一直没有自己"亲自操刀"写一个插件,因为网上插件太丰富了,可耻了. 今天完整的记录一次插件开发. cordova环境6.4.0 第一 ...
- Spring AOP拦截对Controller的请求时的配置失败
简单的说,就是父子容器的问题,将AOP的配置信息放在applicationContext.xml中,该配置文件被ContextLoaderListener加载,Spring会创建一个WebApplic ...
- Jmeter-WINDOWS下的配置部署
前提:已配置安装JDK环境及已部署TOMCAT. 解压apache-jmeter-2.9.zip文件至目录,我的是D:\Program Files目录. 点击我的电脑----属性----高级----环 ...
- 将angular-ui-bootstrap的弹出框定义成一个服务的实践
定义一个弹出框的服务:alert_boxdefiine(["app"],function(mainapp){ mainapp.controller('ModalInstanceCt ...
- css3特效详解
好吧,CSS3 3D transform变换,不过如此! 这篇文章发布于 2012年09月7日,星期五,01:05,归类于 css相关. 阅读 408042 次, 今日 34 次 一.写在前面的秋裤 ...