TcpClient和TcpListener 类的使用编写一个点对点聊天工具(初级入门篇)

TcpClient类和TcpListener类属于.NET框架下网络通信中的应用层类,为Socket通信提供了更简单,对用户更为友好的接口。应用层类比位于底层的Socket类提供了更高层次的抽象,封装了套接字的创建,不需要处理连接的细节。

TcpClient类以更高的抽象程度提供TCP服务的基础,因此许多应用层次上的通信协议,比如FTP传输协议、HTTP超文本传输协议都直接创建在TcpClient等类之上。TcpClient类直接为客户端设计,提供了通过网络连接发送和接收数据的简单方法;TcpListener类用于服务器端,用来监视TCP端口上客户端的请求。

1.TcpClient类

要建立TCP连接,应该提供IP地址和端口号。TcpClient类有三种构造函数。

(1)public TcpClient():使用本机默认的IP地址和默认的端口0来创建TCP连接。

(2)public TcpClient(IPEndPoint):IPEndPoint指定在建立远程连接时所使用的本机IP地址和端口号。

(3)public TcpClient(string,int):初始化TcpClient类的新实例,并连接到指定主机上的制定端口。

需要说明的是,在使用前两种构造函数的时候,只是实现了TcpClient实例对象与IP地址和Port端口的绑定,要完成连接,还需要显示地用Connect方法指定与远程主机的连接。

在网络数据接收和发送方面,TcpClient类使用NetworkStream网络流处理技术,使得读写数据更加方便直观,而不需考虑具体传输的内容。在使用GetStream方法获得用于发送和接收数据的网络流之后,就可以使用标准流读写方法Write和Read来发送和接收数据了。

2.TcpListener类

TcpListener类用于监视TCP端口上客户端的请求,通过绑定本机IP地址和端口(IP地址和端口应与客户端请求一致)来创建TcpListener对象实例,由Start()方法启动侦听;当TcpListener侦听到客户端连接后,根据客户端的请求方式来处理请求,即如果是Socket连接请求,则使用AcceptSocket方法,如果是TcpClient连接请求,则使用AcceptTcpClient方法。最后要关闭使用的连接

tcpclient和socket的区别?

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

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

Socket支持TCP,UDP,IP包,Stream,Dgram等诸多类型
而TcpClient只支持TCP和Stream
 
实例: TcpClient和TcpListener 类的使用-编写一个点对点聊天工具(简单入门演示,客户端和服务端都是在本机)
  服务器端代码:
 class Program
    {
        static void Main(string[] args)
        {
            IPAddress localAddr = IPAddress.Parse("127.0.0.1");//IP地址类,建立一个IP地址对象
            TcpListener server = new TcpListener(localAddr, 13000);//使用IP和端口建立侦听器
            server.Start();//开始侦听
            Console.WriteLine("等待一个连接");
            TcpClient client = server.AcceptTcpClient();//接受一个连接,并创建一个服务器端TcpClient
            Console.WriteLine("客户端已经连接");
            //创建网络流相关的读写器
            NetworkStream stream = client.GetStream();
            StreamReader sr = new StreamReader(stream);
            StreamWriter sw = new StreamWriter(stream);
            while (true)
            {
                Console.WriteLine("客户端:"+sr.ReadLine());//从客户端接受数据
                string msg = Console.ReadLine();
                sw.WriteLine(msg);//向客户端发送数据
                sw.Flush();
            }
            client.Close();
        }
    }
  客户端代码:
class Program
    {
        static void Main(string[] args)
        {
            IPAddress serverAddr = IPAddress.Parse("127.0.0.1");
            //创建一个TcpClient
            TcpClient client = new TcpClient();
            //向服务器发送连接请求,需要与服务端的IP和端口一致(节点通信)
            client.Connect(serverAddr, 13000);
            //创建流读写器
            NetworkStream stream = client.GetStream();
            StreamReader sr = new StreamReader(stream);
            StreamWriter sw = new StreamWriter(stream);
            while (true)
            {
                string msg = Console.ReadLine();
                //向服务器端发送数据
                sw.WriteLine(msg);
                sw.Flush();
                //从服务器端读取数据
                Console.WriteLine("服务器:"+sr.ReadLine());
            }
            client.Close();

        }
    }
 
  效果展示:
先启动服务端,再启动客户端,客户端发送数据,服务端接受,然后服务端发送数据数据,客户端同样可以接收。往复发送接受,完成点对点聊天通信
 
原文地址:https://www.cnblogs.com/lqsilly/p/2916559.html