C#实现简单TCP服务器和客户端网络编程

打印 上一主题 下一主题

主题 511|帖子 511|积分 1535

在C#中进行网络编程涉及许多类和定名空间,用于创建和管理网络毗连、传输数据等。下面是一些主要涉及的类和定名空间:

  • System.Net 定名空间:这个定名空间提供了大部分网络编程所需的类,包罗:

    • IPAddress:用于表示IP地址。
    • IPEndPoint:表示IP地址和端口号的组合。
    • Socket:用于创建和管理网络套接字,实现基本的套接字通讯。
    • TcpListener:用于创建TCP服务器,监听传入的毗连请求。
    • TcpClient:用于创建TCP客户端,毗连到TCP服务器。
    • UdpClient:用于进行UDP通讯。

  • System.Net.Sockets 定名空间:这个定名空间提供了与套接字相关的类,用于实现底层的网络通讯。
  • System.Net.WebClient 类:用于简化HTTP请求和相应的处理,可用于进行基本的HTTP通讯。
  • System.Net.Http 定名空间:提供了更丰富的HTTP支持,包罗:

    • HttpClient:用于进行HTTP客户端通讯,支持异步操作。
    • HttpListener:用于创建HTTP服务器,处理传入的HTTP请求。

  • System.Net.Sockets.SocketAsyncEventArgs 类:提供了异步套接字操作的高级支持,可进步异步通讯的性能。
  • 异步编程:C#提供了异步和await关键字,用于简化异步编程。你可以在网络编程中使用这些关键字来实现异步操作,以避免壅闭主线程。
网络编程的示例代码会根据你想要实现的具体场景而有所差别。
例如,如果你想创建一个简单的TCP服务器,你可以使用TcpListener和TcpClient类来实现。如果你想进行HTTP通讯,你可以使用HttpClient类来发送HTTP请求并处理相应。
以下是一个简单的C#网络编程示例,演示了如何创建一个简单的TCP服务器和客户端:
  1. // 服务器端
  2. using System;
  3. using System.Net;
  4. using System.Net.Sockets;
  5. using System.Text;
  6. class Server {
  7.     static void Main() {
  8.         TcpListener server = new TcpListener(IPAddress.Any, 8080);
  9.         server.Start();
  10.         Console.WriteLine("Server started. Waiting for clients...");
  11.         TcpClient client = server.AcceptTcpClient();
  12.         Console.WriteLine("Client connected.");
  13.         NetworkStream stream = client.GetStream();
  14.         byte[] data = new byte[1024];
  15.         int bytesRead = stream.Read(data, 0, data.Length);
  16.         string message = Encoding.ASCII.GetString(data, 0, bytesRead);
  17.         Console.WriteLine("已接收: " + message);
  18.         //client.Close();
  19.         //server.Stop();
  20.          Console.ReadKey();
  21.     }
  22. }
复制代码
  1. // 客户端
  2. using System;
  3. using System.Net.Sockets;
  4. using System.Text;
  5. class Client {
  6.     static void Main() {
  7.         TcpClient client = new TcpClient();
  8.         client.Connect("127.0.0.1", 8080);
  9.         string message = "Hello, server!";
  10.         byte[] data = Encoding.ASCII.GetBytes(message);
  11.         NetworkStream stream = client.GetStream();
  12.         stream.Write(data, 0, data.Length);
  13.         Console.WriteLine("已发送" + message);
  14.         Console.ReadKey();
  15.         //client.Close();
  16.     }
  17. }
复制代码

 
System.Net.Sockets 定名空间
是 C# 中用于进行底层网络编程的定名空间,它包罗了许多类和枚举,用于创建和管理套接字(Sockets)以进行网络通讯。下面是一些在这个定名空间下常用的类和枚举:

  • Socket 类:Socket 类是进行网络通讯的焦点,可以用于创建各种范例的套接字,包罗 TCP、UDP 和原始套接字。

    • SocketType 枚举:定义套接字的范例,如 SocketType.Stream(用于 TCP)和 SocketType.Dgram(用于 UDP)。
    • ProtocolType 枚举:定义套接字使用的协议,如 ProtocolType.Tcp 和 ProtocolType.Udp。

  • SocketAsyncEventArgs 类:这个类用于在异步操作中传递套接字操作的参数,可以有效地管理异步网络操作。
  • TcpListener 类:用于创建 TCP 服务器端监听,担当客户端毗连请求。

    • Pending 方法:查抄是否有等待毗连的客户端请求。
    • AcceptSocket 方法:担当客户端毗连,返回毗连的套接字。

  • TcpClient 类:用于创建 TCP 客户端毗连。

    • Connect 方法:毗连到指定的 IP 地址和端口号。

  • UdpClient 类:用于创建 UDP 客户端和服务器端。

    • Send 方法:发送 UDP 数据报。
    • Receive 方法:吸收 UDP 数据报。

NetworkStream 类
位于 System.Net.Sockets 定名空间中,用于在网络套接字上提供流式数据传输的功能。它是基于 System.IO.Stream 的一个特殊实现,用于在网络毗连上进行数据的读取和写入。
以下是一些关于 NetworkStream 类的基本信息和用法:
构造函数:
public NetworkStream(Socket socket, bool ownsSocket);


  • 构造一个 NetworkStream 对象,可以指定是否拥有该套接字。拥有套接字意味着在 NetworkStream 对象被开释时,套接字也会被关闭。
方法:


  • Read(byte[] buffer, int offset, int size):从流中读取数据并存储到指定的缓冲区中。
  • Write(byte[] buffer, int offset, int size):将数据从指定的缓冲区写入到流中。
  • Close():关闭流以及与之关联的套接字。
属性:


  • CanRead:指示是否可以从流中读取数据。
  • CanWrite:指示是否可以向流中写入数据。
  • Socket:获取与流关联的套接字。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表