目录

一、Socket类

1.Socket类的常用属性及说明

2.Socket类的常用方法及说明

二、TcpClient类

三、TcpListener类 

四、示例

1.源码

2.生成效果


        TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在C#中,TCP程序设计是指利用Socket类、TcpClient类和 TcpListener类编写的网络通信程序,这3个类都位于System.Net.Sockets命名空间中。利用TCP协议进行通信的两个应用程序是有主次之分的,一个称为服务器端程序,另一个称为客户端程序。

一、Socket类

        Socket类为网络通信提供了一套丰富的方法和属性,主要用于管理连接,实现Berkeley套接字接口,同时它还定义了绑定、连接网络端点及传输数据所需的各种方法,提供处理端点连接传输等细节所需要的功能。TcpClient和UdpClinet等类在内部使用该类。

1.Socket类的常用属性及说明

2.Socket类的常用方法及说明

二、TcpClient类

        TcpClient类用于在同步阻止模式下通过网络来连接、发送和接收流数据。为了使TcpClient连接并交换数据,TcpListener实例或Socket实例必须侦听是否有传入的连接请求。可以使用下面两种方法之一连接该侦听器。

  • 创建一个TcpClient,并调用Connect方法连接。
  • 使用远程主机的主机名和端口号创建TcpClient,此构造函数将自动尝试一个连接。
  • TcpListener类用于在阻止同步模式下侦听和接受传入的连接请求。可使用TcpClient类或Socket类来连接TcpListener,并且可以使用IPEndPoint、本地IP地址及端口号或者仅使用端口号来创建TcpListener实例对象。

        TcpClient类的常用属性、方法及说明如表:

三、TcpListener类 

        TcpListener类的常用属性、方法及说明如表: 

四、示例

1.源码

// Client
// .NET 8.0控制台应用
using System;
using System.IO;
using System.Net;

using System.Net.Sockets;

namespace _Client
{
    class Program
    {

        static void Main(string[] args)
        {
            TcpClient tcpClient = new();          //创建一个TcpClient对象,自动分配主机IP地址和端口号  
            tcpClient.Connect("127.0.0.1", 888);  //连接服务器,其IP和端口号为127.0.0.1和888  
            if (tcpClient != null)                //判断是否连接成功
            {
                Console.WriteLine("连接服务器成功");
                NetworkStream networkStream = tcpClient.GetStream();  //获取数据流
                BinaryReader reader = new(networkStream);             //定义流数据读取对象
                BinaryWriter writer = new(networkStream);             //定义流数据写入对象
                string localip = "127.0.0.1";                                               //存储本机IP,默认值为127.0.0.1
                IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());//获取所有IP地址
                foreach (IPAddress ip in ips)
                {
                    if (!ip.IsIPv6SiteLocal)         //如果不是IPV6地址
                        localip = ip.ToString();     //获取本机IP地址
                }
                writer.Write(localip + " 你好服务器,我是客户端");    //向服务器发送消息  
                while (true)
                {
                    try
                    {
                        string strReader = reader.ReadString();     //接收服务器发送的数据  
                        if (strReader != null)
                        {
                            Console.WriteLine("来自服务器的消息:" + strReader);//输出接收的服务器消息
                        }
                    }
                    catch
                    {
                        break;                          //接收过程中如果出现异常,退出循环  
                    }
                }
            }
            Console.WriteLine("连接服务器失败");
        }
    }
}

// Server
// .NET 8.0控制台应用
using System.Net;
using System.Net.Sockets;

namespace _Server
{
    class Program
    {
        static void Main()
        {
            int port = 888;
            TcpClient tcpClient;
            IPAddress[] serverIP = Dns.GetHostAddresses("127.0.0.1");   //定义IP地址
            IPAddress localAddress = serverIP[0];                       //IP地址  
            TcpListener tcpListener = new(localAddress, port);          //监听套接字
            tcpListener.Start();                                                                                
                                                                        //开始监听  
            Console.WriteLine("服务器启动成功,等待用户接入…");            //输出消息  
            while (true)
            {
                try
                {
                    tcpClient = tcpListener.AcceptTcpClient();          //每接收一个客户端则生成一个TcpClient  
                    NetworkStream networkStream = tcpClient.GetStream();//获取网络数据流
                    BinaryReader reader = new(networkStream);           //定义流数据读取对象
                    BinaryWriter writer = new(networkStream);           //定义流数据写入对象
                    while (true)
                    {
                        try
                        {
                            string strReader = reader.ReadString();      //接收消息
                            string[] strReaders = strReader.Split([' ']);//截取客户端消息
                            Console.WriteLine("有客户端接入,客户IP:" + strReaders[0]);  //输出接收的客户端IP地址  
                            Console.WriteLine("来自客户端的消息:" + strReaders[1]);        //输出接收的消息  
                            string strWriter = "我是服务器,欢迎光临";    //定义服务端要写入的消息
                            writer.Write(strWriter);                    //向对方发送消息  
                        }
                        catch
                        {
                            break;
                        }
                    }
                }
                catch
                {
                    break;
                }
            }
        }
    }
}

2.生成效果

C#网络编程TCP程序设计(Socket类、TcpClient类和 TcpListener类)-LMLPHP

 

12-05 14:07