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

本文主要是介绍C#网络编程TCP程序设计(Socket类、TcpClient类和 TcpListener类),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、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类的常用属性及说明

属性

说明

AddressFamily

获取Socket的地址族

Availabe

获取已经从网络接收且可供读取的数据量

Connected

获取一个值,该值指示Socket是在上次Send还是Receive操作时连接到远程主机

Handle

获取Socket的操作系统句柄

LocalEndPoint

获取本地终结点

ProtocolType

获取Socket的协议类型

RemoteEndPoint

获取远程终结点

SendTimeout

获取或设置一个值,该值指定之后同步Send调用将超时的时间长度

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

方法说明
Accept为新建连接创建新的Socket
BeginAccept开始一个异步操作来接受一个传入的连接尝试
BeginConnect开始一个对远程主机连接的异步请求
BeginDisconnect开始异步请求从远程终结点断开连接
BeginReceive开始从连接的Socket中异步接收数据
BeginSend将数据异步发送到连接的Socket
BeginSendFile将文件异步发送到连接的Socket
BeginSendTo向特定远程主机异步发送数据
Close关闭Socket连接并释放所有关联的资源
Connect建立与远程主机的连接
Disconnect关闭套接字连接并允许重用套接字
EndAccept异步接受传入的连接尝试
EndConnect结束挂起的异步连接请求
EndDisconnect结束挂起的异步断开连接请求
EndReceive结束挂起的异步读取
EndSend结束挂起的异步发送
EndSendFile结束文件的挂起异步发送
EndSendTo结束挂起的、向指定位置进行的异步发送
Listen将Socket置于侦听状态
Receive接收来自绑定的Socket的数据
Send将数据发送到连接的Socket
SendFile将文件和可选数据异步发送到连接的Socket
SendTo将数据发送到特定终结点
Shutdown禁用某Socket上的发送和接收

二、TcpClient类

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

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

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

属性及方法

说明

Available属性

获取已经从网络接收且可供读取的数据量

Client属性

获取或设置基础Socket

Connected属性

获取一个值,该值指示TepClient的基础Socket是否已连接到远程主机

RecieveBufferSize属性

获取或设置接收缓冲区的大小

RecieveTimeout属性

获取或设置在初始化一个读取操作后TcpClient等待接收数据的时间量

SendBufferSize属性

获取或设置发送缓冲区的大小

SendTimeout属性

获取或设置TcpClient等待发送操作成功完成的时间量

BeginConnect方法

开始一个对远程主机连接的异步请求

Close方法

释放此TcpClient实例,而不关闭基础连接

Connec方法

使用指定的主机名和端口号将客户端连接到TCP主机

EndConnect方法

异步接受传入的连接尝试

GetStream方法

返回用于发送和接收数据的NetworkStream

三、TcpListener类 

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

属性及方法说明
LocalEndpoint属性获取当前TcpListener的基础EndPoint
Server属性获取基础网络Socket
AcceptSocket/AcceptTcpClient方法接受挂起的连接请求
BeginAcceptSocket/BeginAcceptTcpClient方法开始一个异步操作来接受一个传入的连接尝试
EndAcceptSocket方法异步接受传入的连接尝试,并创建新的Socket来处理远程主机通信
EndAcceptTcpClient方法异步接受传入的连接尝试,并创建新的TcpClient来处理远程主机通信
Start方法开始侦听传入的连接请求
Stop方法关闭侦听器

四、示例

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.1IPAddress[] 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类)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/456438

相关文章

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET