c# tcp udp 的使用场景
之前用tcp实现了一个案例(远程协助),后来我考虑用udp去实现它,于是又研究了下udp,我发现理论上udp可以做到,但是有一些问题不知道会不会有瓶颈
我参照网上写了一个简单的示例如下
服务端接收、发送数据
int recv;
byte[] data = new byte[];
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, );
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //绑定网络地址
newsock.Bind(ipep); Console.WriteLine("This is a Server, host name is {0}", Dns.GetHostName()); //等待客户机连接
Console.WriteLine("Waiting for a client"); //得到客户机IP
IPEndPoint sender = new IPEndPoint(IPAddress.Any, );
EndPoint Remote = (EndPoint)(sender);
while (true)
{
recv = newsock.ReceiveFrom(data, ref Remote);
newsock.SendTo(data, Remote);
Console.WriteLine("Message received from {0}: ", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, , recv));
}
客户端发送、接收数据
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), );
//定义网络类型,数据连接类型和网络协议UDP
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
private void button1_Click(object sender, EventArgs e)
{
byte[] data = new byte[];
string input, stringData;
//构建TCP 服务器
//设置服务IP,设置TCP端口号
for (int i = ; i<=;i++ )
{
string welcome =Guid.NewGuid().ToString();
data = Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, ipep);
}
//Thread th = new Thread(receivedata);
//th.Start();
}
public void receivedata()
{
byte[] data = new byte[];
IPEndPoint sen = new IPEndPoint(IPAddress.Any, );
EndPoint Remote = (EndPoint)sen;
server.Bind(sen);
data = new byte[];
while (true)
{
int recv = server.ReceiveFrom(data, ref Remote);
this.Invoke((EventHandler)delegate
{
listView1.Items.Add(new ListViewItem { Text = Encoding.ASCII.GetString(data, , recv) });
});
}
}
private void Form1_Load(object sender, EventArgs e)
{
Thread th = new Thread(receivedata);
th.Start();
}
于是问题出现了,因为我发现服务端udp是一个端口,一个线程(不知道怎么做多个端口映射,貌似也不可以),假如我做即时性要求很高数据量又大的应用,譬如远程协助或者语音聊天等,所有客户端都向服务端的一个端口发送数据,客户端稍有数量的话,会不会有接收瓶颈?
于是我思考了下,假如我采用一个固定的端口用于采集客户端,采集到客户端后再给客户端分配一个端口,开辟一个线程用于监听这个客户端消息,这样的话我可以做到不同的客户端与服务器通信采用了彼此独立的端口,但是这样做和tcp协议又是很类似了,我就要改造udp,那么改造udp的成本要考虑进去,这是端口的问题,暂时不考虑端口,假设现在即时性要求降低了,只是文字聊天,服务端有一定的吞吐能力,仍然采用udp服务端做转发实现客户端与客户端的通信,那么服务端、客户端就要做心跳包,来检测连接是否断开,也要自己管理连接的状态。
因此采用udp做即时应用 少不了的两个问题
1.管理连接状态
2.解决端口映射问题(随着客户端数量增加)
当然还有其他的问题 譬如丢包、顺序等这里没有测试到
所以tcp、udp的使用场景要视情况而定,你是否有足够能力去改造udp,让它变得完美,否则就稳妥的使用tcp吧
c# tcp udp 的使用场景的更多相关文章
- TCP/UDP 协议,和 HTTP、FTP、SMTP,区别及应用场景
一.OSI 模型 OSI 模型主要作为一个通用模型来做理论分析,而TCP/IP 协议模型是互联网的实际通讯协议,两者一般做映射分析,以下不做严格区分和声明(好吧,比较懒): OSI 整个模型层次大致可 ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.2
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.4.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
随机推荐
- Android界面View及ViewGroup学习 《转载》
View及ViewGroup类关系 Android View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的. View ...
- springmvc用来绑定参数的注解(转)
引言: 原文链接:http://blog.csdn.net/kobejayandy/article/details/12690161 接上一篇文章,对@RequestMapping进行地址映射讲解之后 ...
- Python编码错误的解决办法SyntaxError: Non-ASCII character '\xe5' in file
[现象] 在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息: SyntaxError: Non-ASCII character '\xe5' in file ******* [原因 ...
- 《Unity 3D游戏客户端基础框架》概述
框架概述: 做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框 ...
- 哥伦比亚大学 Columbia University Image Library (COIL-20) 数据集
转自:http://blog.csdn.net/garfielder007/article/details/51480820,这个人博客里面有不错的 数据集,http://blog.csdn.net/ ...
- Java设计模式百例 - 观察者模式
观察者(Observer)模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主体对象的状态变化会通知所有观察者对象.观察者模式又叫做发布-订阅(Publish/Subscribe ...
- (十二)break,continue
class Break { //break,continue public static void main(String[] args) { //break for(int i =0;i<=5 ...
- SpringMVC的启动过程
前言 下面是一个SpringMVC应用的配置文件,需要注意两个地方,一个是ContextLoaderListener,一个是dispatcherServlet.web容器正是通过这两个配置才和spri ...
- 十、python沉淀之路--高阶函数初识
一.高阶函数:分两种:一种是返回值中包含函数体:另一种是把一个函数体当作了参数传给了另一个函数 1.返回值中包含函数体 例1. def test(): print('这是一个测试') return t ...
- 【精品分享一】JAVA 精品图书高清PDF下载
更多图书尽在第一云教育book.1eduyun.com JAVA核心技术卷2:高级特征(原书第8版) JAVA软件开发从新手到高手(Java从入门到精通(第3版)+Java项目开发全程实录(第3版)) ...