赞
踩
目录
TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在C#中,TCP程序设计是指利用Socket类、TcpClient类和 TcpListener类编写的网络通信程序,这3个类都位于System.Net.Sockets命名空间中。利用TCP协议进行通信的两个应用程序是有主次之分的,一个称为服务器端程序,另一个称为客户端程序。
Socket类为网络通信提供了一套丰富的方法和属性,主要用于管理连接,实现Berkeley套接字接口,同时它还定义了绑定、连接网络端点及传输数据所需的各种方法,提供处理端点连接传输等细节所需要的功能。TcpClient和UdpClinet等类在内部使用该类。
属性 | 说明 |
AddressFamily | 获取Socket的地址族 |
Availabe | 获取已经从网络接收且可供读取的数据量 |
Connected | 获取一个值,该值指示Socket是在上次Send还是Receive操作时连接到远程主机 |
Handle | 获取Socket的操作系统句柄 |
LocalEndPoint | 获取本地终结点 |
ProtocolType | 获取Socket的协议类型 |
RemoteEndPoint | 获取远程终结点 |
SendTimeout | 获取或设置一个值,该值指定之后同步Send调用将超时的时间长度 |
方法 | 说明 |
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连接并交换数据,TcpListener实例或Socket实例必须侦听是否有传入的连接请求。可以使用下面两种方法之一连接该侦听器。
TcpClient类的常用属性、方法及说明如表:
属性及方法 | 说明 |
Available属性 | 获取已经从网络接收且可供读取的数据量 |
Client属性 | 获取或设置基础Socket |
Connected属性 | 获取一个值,该值指示TepClient的基础Socket是否已连接到远程主机 |
RecieveBufferSize属性 | 获取或设置接收缓冲区的大小 |
RecieveTimeout属性 | 获取或设置在初始化一个读取操作后TcpClient等待接收数据的时间量 |
SendBufferSize属性 | 获取或设置发送缓冲区的大小 |
SendTimeout属性 | 获取或设置TcpClient等待发送操作成功完成的时间量 |
BeginConnect方法 | 开始一个对远程主机连接的异步请求 |
Close方法 | 释放此TcpClient实例,而不关闭基础连接 |
Connec方法 | 使用指定的主机名和端口号将客户端连接到TCP主机 |
EndConnect方法 | 异步接受传入的连接尝试 |
GetStream方法 | 返回用于发送和接收数据的NetworkStream |
TcpListener类的常用属性、方法及说明如表:
属性及方法 | 说明 |
LocalEndpoint属性 | 获取当前TcpListener的基础EndPoint |
Server属性 | 获取基础网络Socket |
AcceptSocket/AcceptTcpClient方法 | 接受挂起的连接请求 |
BeginAcceptSocket/BeginAcceptTcpClient方法 | 开始一个异步操作来接受一个传入的连接尝试 |
EndAcceptSocket方法 | 异步接受传入的连接尝试,并创建新的Socket来处理远程主机通信 |
EndAcceptTcpClient方法 | 异步接受传入的连接尝试,并创建新的TcpClient来处理远程主机通信 |
Start方法 | 开始侦听传入的连接请求 |
Stop方法 | 关闭侦听器 |
- // 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;
- }
- }
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。