黑马程序员—比较Socket与TcpListener、TcpClient

本文介绍了Socket、TcpListener和TcpClient在System.Net.Sockets命名空间中的关系和使用场景。Socket适用于多种协议,包括Tcp和Udp,需要在编程时指定协议类型。TcpListener和TcpClient专门针对Tcp协议,直接用于Tcp通信。TcpClient通过NetworkStream进行读写操作,而Socket直接使用Receive/Send方法。此外,文章还提供了三者的实例代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- Windows Phone 7手机开发 .Net培训 、期待与您交流! ----------------------

 

三者所属命名空间:

System.Net.Sockets.Socket
System.Net.Sockets.TcpListener
System.Net.Sockets.TcpClient

 

一、三者在同一命名空间下,属于平级关系;
       从命名上可以看出来,后两个类针对的是Tcp,这两个确实是基于Tcp协议的(相当于另一种套接字)。如果确定自己的程序是基于Tcp协议通讯的,可以直接用这两个类;

       而第一个(Socket)则范围更广,包括Tcp、UDP等各种协议,需要编程时自己指定具体哪一种协议。若果确定自己的程序不是基于Tcp协议通讯的,则用这个类。

 

二、接收、发送数据所调用的函数不同:
      TcpClient:    Read() / Write()
      Socket:       Receive() / Send()

 

三、调用上面函数的主体不同:
     TcpClient:用网络流,NetworkStream TcpClient.GetStream();
     Socket: 用通信套接字,Socket connSocket = sockWatch.Accept();

 

1.Socket
 Socket的用法:
    Socket sockWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //实例化监听套接字
    sockWatch.Bind(IPEndPoint);          // 绑定
    sockWatch.Listen();                        //启动监听
  
    Socket connSocket = sockWatch.Accept(); //为新建连接创建新的Socket

    connSocket.Receive(byte[] buffer); //套接字接收数据,将数据存入接收缓冲区。
    connSocket.Send(byte[] buffer);  //将数据发送到连接的 System.Net.Sockets.Socket。
 

 

2.TcpListener、TcpClient


 TcpListener:侦听传入的连接请求
      TcpListener _listener = new TcpListener(IPEndPoint);
      _listener.Start();  //开始侦听传入的连接请求

 

 TcpClient:用于发送和接收数据的System.Net.Sockets.TcpClient.


     TcpClient connTcpClient = _listener.AcceptTcpClient(); //为新建连接创建通信TcpClient
     NetworkStream netStream = connTcpClient.GetStream();   //获取网络流
     netStream.Read(byte[] buffer,int offset,int size); //从流中读取数据
     netStream.Write(byte[] buffer,int offset,int size);  //将数据写入到流中

 

注意:使用 TcpClient时要先获取用于发送和接收数据的 System.Net.Sockets.NetworkStream(网络流),用此网络流进行发送和接受数据。

 

 

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

详细请查看:http://net.itheima.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值