C#基于TCP的Socket通信

    TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编 程。然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实现不是一天两天的功夫,所幸的是在。net framework环境下,我们不必要去追究TCP协议底层的实现,一样可以很方便的编写出基于TCP协议进行网络通讯的程序。

C#基于TCP协议的网络通讯

    要进行C#基于TCP协议的网络通讯,首先必须建立同远程主机的连接,连接地址通常包括两部分——主机名和端口,如www.yesky.com :80中, www.yesky.com就是主机名,80指主机的80端口,当然,主机名也可以用IP地址代替。当连接建立之后,就可以使用这个连接去发送和接收数据包,TCP协议的作用就是保证这些数据包能到达终点并且能按照正确的顺序组装起来。

    在。net framework的类库(Class Library)中,提供了两个用于TCP网络通讯的类,分别是TcpClient和TcpListener.由其英文意义显而易见,TcpClient 类是基于TCP协议的客户端类,而TcpListener是服务器端,监听(Listen)客户端传来的连接请求。TcpClient类通过TCP协议与 服务器进行通讯并获取信息,它的内部封装了一个Socket类的实例,这个Socket对象被用来使用TCP协议向服务器请求和获取数据。因为与远程主机 的交互是以数据流的形式出现的,所以传输的数据可以使用。net framework中流处理技术读写。在我们下边的例子中,你可以看到使用NetworkStream类操作数据流的方法。

    在下面的例子中,我们将建立一个时间服务器,包括服务器端程序和客户端程序。服务器端监听客户端的连接请求,建立连接以后向客户端发送当前的系统时间。

    先运行服务器端程序,下面截图显示了服务器端程序运行的状况:

    然后运行客户端程序,客户端首先发送连接请求到服务器端,服务器端回应后发送当前时间到客户端,这是客户端程序的截图:

    发送完成后,服务器端继续等待下一次连接:

    通过这个例子我们可以了解TcpClient类的基本用法,要使用这个类,必须使用System.Net.Socket命名空间,本例用到的三个命名空间如下:

  
  
  1. using System;  
  2. using System.Net.Sockets;  
  3. using System.Text;  
  4. //从字节数组中获取字符串时使用该命名空间中的类  
  5. //首先讨论一下客户端程序,开始我们必须初始化一个TcpClient类的实例:  
  6.  
  7. TcpClient  client  =  new  TcpClient(hostName, portNum);  
  8. //然后使用TcpClient类的GetStream()方法获取数据流,
    并且用它初始化一个NetworkStream类的实例:  
  9.  
  10. NetworkStream  ns  =  client .GetStream(); 

    注意,当使用主机名和端口号初始化TcpClient类的实例时,直到跟服务器建立了连接,这个实例才算真正建立,程序才能往下执行。如果因为网络不通,服务器不存在,服务器端口未开放等等原因而不能连接,程序将抛出异常并且中断执行。

    建立数据流之后,我们可以使用NetworkStream类的Read()方法从流中读取数据,使用Write()方法向流中写入数据。读取数据时,首先 应该建立一个缓冲区,具体的说,就是建立一个byte型的数组用来存放从流中读取的数据。Read()方法的原型描述如下:

  
  
  1. public override int Read(in byte[] buffer,int offset,int size) 

    buffer是缓冲数组,offset是数据(字节流)在缓冲数组中存放的开始位置,size是读取的字节数目,返回值是读取的字节数。在本例中,简单地使用该方法来读取服务器反馈的信息:

  
  
  1. byte[]  bytes  =  new  byte[1024];//建立缓冲区  
  2. int  bytesRead  =  ns .Read(bytes, 0, bytes.Length);//读取字节流  
  3. // 然后显示到屏幕上:  
  4. Console.WriteLine(Encoding.ASCII.GetString(bytes,0,bytesRead));  
  5. //最后不要忘记关闭连接:  
  6.  
  7. client.Close(); 

    以上介绍C#基于TCP协议的网络通讯。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C#基于SocketTCP编程是一种常见的网络编程技术,它允许应用程序通过TCP/IP协议与远程服务器进行通信。在C#中,可以使用System.Net.Sockets命名空间中的TcpClient和TcpListener类来实现TCP连接的建立和监听。 要建立TCP连接,首先需要创建一个TcpClient对象,并指定要连接的服务器的IP地址和端口号。然后可以使用TcpClient的Connect方法来建立连接。一旦连接建立成功,就可以使用TcpClient提供的网络流进行数据的发送和接收。 以下是一个简单的C#代码示例,演示了基于SocketTCP编程中的客户端和服务器端的交互: 客户端: ```csharp using System; using System.Net.Sockets; public class TcpClientExample { public static void Main() { string serverIP = "127.0.0.1"; int serverPort = 8888; try { TcpClient client = new TcpClient(serverIP, serverPort); // 获取网络流 NetworkStream stream = client.GetStream(); // 发送数据 string message = "Hello, server!"; byte[] data = System.Text.Encoding.UTF8.GetBytes(message); stream.Write(data, 0, data.Length); // 接收数据 data = new byte[256]; int bytesRead = stream.Read(data, 0, data.Length); string response = System.Text.Encoding.UTF8.GetString(data, 0, bytesRead); Console.WriteLine("Server response: " + response); // 关闭连接 client.Close(); } catch (Exception e) { Console.WriteLine("Error: " + e.Message); } } } ``` 服务器端: ```csharp using System; using System.Net; using System.Net.Sockets; public class TcpServerExample { public static void Main() { int serverPort = 8888; try { TcpListener server = new TcpListener(IPAddress.Any, serverPort); // 开始监听 server.Start(); Console.WriteLine("Server started. Waiting for clients..."); // 接受客户端连接 TcpClient client = server.AcceptTcpClient(); Console.WriteLine("Client connected."); // 获取网络流 NetworkStream stream = client.GetStream(); // 接收数据 byte[] data = new byte[256]; int bytesRead = stream.Read(data, 0, data.Length); string request = System.Text.Encoding.UTF8.GetString(data, 0, bytesRead); Console.WriteLine("Client request: " + request); // 发送数据 string response = "Hello, client!"; data = System.Text.Encoding.UTF8.GetBytes(response); stream.Write(data, 0, data.Length); // 关闭连接 client.Close(); server.Stop(); } catch (Exception e) { Console.WriteLine("Error: " + e.Message); } } } ``` 以上代码演示了一个简单的TCP客户端和服务器端的交互过程。客户端向服务器发送一条消息,服务器接收到消息后,返回一条响应给客户端。可以根据实际需求进行扩展和优化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值