好像这些类都可以实现客户端与服务器的通信:
TcpClient、UdpClient、HttpWebRequest、WebRequest、HttpClient、Socket、WebClient、WebApi框架
有没有高人来解释一下,什么情况下用? 怎么用? 它们之间有何关系?
用 Socket
大神能否详细点
System.Object
System.MarshalByRefObject
System.Net.WebRequest
System.Net.HttpWebRequest
https://msdn.microsoft.com/zh-cn/library/system.net.httpwebrequest.aspx
System.Object
System.Net.Http.HttpMessageInvoker
System.Net.Http.HttpClient
https://msdn.microsoft.com/en-us/library/system.net.http.httpclient(v=vs.110).aspx
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Net.WebClient
https://msdn.microsoft.com/zh-cn/library/system.net.webclient(v=vs.100).aspx#平台
各个类其实通过名字也能知道一个大概了,我也不见的能说的清楚,所以提供了msdn地址供参考。这个问题就有点类似于用哪个函数去打开文件一样。你需要看各个类是主要作用是什么,哪个版本开始支持的,如果感觉文档说的功能一样,一般用更新的类。
Socket很明显是底层了类,不作详述。
TcpClient和UdpClient相对一组,3层通讯嘛
HttpWebRequest、WebRequest这个在上面已经看到是继承关系,具体的就看文档了。WebRequest对统一资源标识符 (URI) 发出请求。 这是一个 abstract 类。
WebClient:提供用于将数据发送到由 URI 标识的资源及从这样的资源接收数据的常用方法。(包含收response和发request的调用)
HttpClient:Provides a base class for sending HTTP requests and receiving HTTP responses from a resource identified by a URI.
HttpClient和WebClient是用来收发的具体的调用类。这样就比较清楚了吧
总结一下,多看msdn文档。
1、如果是TCP/UDP,可以直接使用Socket类,特别是做服务器,使用异步模型,性能杠杠的,直接参考微软的官方.net core的例子:https://docs.microsoft.com/zh-cn/dotnet/api/system.net.sockets.socketasynceventargs.-ctor?view=netcore-2.1
对于服务器来说,要做一下缓存管理,切勿因为收发产生大量的小数组,例子有这部分,自己研究一下。
2、如果是后台开发,需要使用http协议,建议使用webapi;
3、c#对http接口的调用建议采用WebClient,这个类内部做了连接池,不要每次都去生成webclient,建议采用单例模式;
说白了就是用什么协议就用什么方法
Socket