tcpclient和socket的区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tcpclient和socket的区别?相关的知识,希望对你有一定的参考价值。

Socket:网络层
TcpClient:传输层
当你只考虑:主机,端口,数据传输时,用TcpClient,或UdpClient
当你要考虑:IP封包,路由,IP数据包时,用Socket

有朋友这么解释,可是小弟还是不很明白```请大虾再来解释一下`
什么叫"只考虑主机,端口,数据传输时"和什么叫"考虑IP封包,路由,IP数据包时"啊```??

TcpClient是在Socket的基础上运行的。

Socket完全可以涵盖TcpClient,只不过TcpClient为了简化一部分Socket的功能。

Socket支持TCP,UDP,IP包,Stream,Dgram等诸多类型
而TcpClient只支持TCP和Stream

如果你还有许多不懂的话,推荐你学NET网络编程前,好好学一学TCP/IP或OSI网络模型,这也是一门学科,不是简单几句话就可以解释清楚的,否则越解释你越糊涂。
参考技术A 物理层:HUB,网线
链路层:MAC,ARP,交换机
网络层:IP,ICMP,IGMP,路由器
传输层:TCP,UDP
会话层:HTTP,SMTP,FTP,POP3
表示层:SOAP,SSL
应用层:WebService的Method
-------------------------------
Socket是对网络层操作
TcpClient是对传输层操作
ASP.NET是对会话层操作
-------------------------------
TcpClient是Socket的基础上的封装。一般的应用,用TcpClient可以了,或者使用NetStream,如果要做点高级的事情,建议用Socket做。
参考技术B ------------------------------
物理层:HUB,网线
链路层:MAC,ARP,交换机
网络层:IP,ICMP,IGMP,路由器
传输层:TCP,UDP
会话层:HTTP,SMTP,FTP,POP3
表示层:SOAP,SSL
应用层:WebService的Method
-------------------------------
Socket是对网络层操作
TcpClient是对传输层操作
ASP.NET是对会话层操作

你可以用Socket访问IIS中的ASP.NET的页面,不过传输层,会话层的转换就要你自已用代码实现了

Socket网络编程(C#)----TcpListener 与 TcpClient

◇TcpListener 用于阻止同步模式下侦听和接受传入连接请求。(用于侦听)

      ◇我们先来做一件事情,对本地机器上某一端口的侦听。

      ◇因为如果想要与外界进行通信,第一件要做的事情就是开启对端口的侦听,这就像为计算机打开了一个“门”,所有向这个“门”发送的请求(“敲门”)都会被系统接收到。

  ◇在C#中可以通过下面几个步骤完成,首先使用本机Ip地址和端口号创建一个System.Net.Sockets.TcpListener类型的实例,然后在该实例上调用Start()方法,从而开启对指定端口的侦听。

  ◇创建一个控制台程序,名为MyTcpListener具体代码,如下:

 1 using System.Net;               // 引入这两个命名空间,以下同
 2 using System.Net.Sockets;
 3 using ... //
 4 
 5 class Server {
 6     static void Main(string[] args) {
 7         Console.WriteLine("Server is running ... ");
 8         IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });
 9         TcpListener listener = new TcpListener(ip, 8500);
10 
11         listener.Start();           // 开始侦听
12         Console.WriteLine("Start Listening ...");
13 
14         Console.WriteLine("\n\n输入\"Q\"键退出。");
15         ConsoleKey key;
16         do {
17             key = Console.ReadKey(true).Key;
18         } while (key != ConsoleKey.Q);
19     }
20 }

  ◇说明:我们利用TcpListener类的构造函数,实例化出了一个listener对象,监听了127.0.0.1(也就是本地机器)的8500端口。我们可以在“运行——》cmd——》利用命令netstate -an”来查看我们当前机器所监听的状态(可以找到这个8500端口),这里就不演示了。

 

◇TcpClient类是用于在同步阻塞模式下通过网络来连接、发送和接受数据流。(用于请求)

  ◇每创建一个新的TcpClient便相当于创建了一个新的套接字Socket去与服务端通信,.Net会自动为这个套接字分配一个端口号,上面说过,TcpClient类不过是对Socket进行了一个包装。创建TcpClient类型实例时,可以在构造函数中指定远程服务器的地址和端口号。这样在创建的同时,就会向远程服务端发送一个连接请求(“握手”),一旦成功,则两者间的连接就建立起来了。也可以使用重载的无参数构造函数创建对象,然后再调用Connect()方法,在Connect()方法中传入远程服务器地址和端口号,来与服务器建立连接。

  ◇创建一个控制台程序,名为MyTcpClient,具体代码如下:

 1 class Client {
 2     static void Main(string[] args) {
 3 
 4         Console.WriteLine("Client Running ...");
 5         TcpClient client = new TcpClient();
 6         try {
 7             client.Connect("localhost", 8500);      // 与服务器连接
 8         } catch (Exception ex) {
 9             Console.WriteLine(ex.Message);
10             return;
11         }
12         // 打印连接到的服务端信息
13         Console.WriteLine("Server Connected!{0} --> {1}",
14             client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
15 
16         // 按Q退出
17     }
18 }

 

  ◇说明:其中Connect()方法中的参数就是需要连接主机的ip地址号以及端口号。

 

◇这时候我们就可以先运行MyTcpListener(不要关掉),然后再运行MyTcpClient,看看运行的结果如何。

 

以上是关于tcpclient和socket的区别?的主要内容,如果未能解决你的问题,请参考以下文章

tcpclient和socket的区别

网络编程中,使用Socket和TcpClient有啥区别

网络编程中,使用Socket和TcpClient有啥区别

C# 如何判断某个 tcp 端口是否被占用?

处理异步时的 TcpClient 与 Socket

直接在 Socket 上使用 TcpClient 有啥好处?