⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 echoserversocket.cs

📁 在Echo服务器上的多线程问题
💻 CS
字号:
using System;
using System.Net;
using System.Net.Sockets;

class EchoServerSocket
{
   public static void Main()
   {
      //声明用来记录服务器端Socket及用户端Socket对象的变量
      Socket serverSocket,theConnection;
      //声明一记录本地端IP地址的变量
      IPHostEntry bindAddress;
      //声明一记录IP地址及通信端口号的变量
      IPEndPoint myHost;

      //创建一个Socket对象
      serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
      //获取本地端的计算机名称
      String hostName = Dns.GetHostName();
      //产生一个IPAddress对象
      bindAddress = Dns.Resolve(hostName);
      try
      {
         myHost = new IPEndPoint(bindAddress.AddressList[0],7);
      }
      catch(ArgumentException e)
      {
         //若通信端口号大于最大值时显示出错误信息
         Console.WriteLine("Invalid port number!!");
         //退出程序
         return;
      }
      try
      {
         //绑定所指定的接口
         serverSocket.Bind(myHost);
         //开始侦听指定接口上的网络请求
         serverSocket.Listen(100);   
      }
      catch(SocketException se)
      {
         Console.WriteLine("Could not bind to specified interface!!");
         return;
      }
      //显示成功侦听信息
      Console.WriteLine("Echo Server has been created successfully!!");
      Console.WriteLine("Waiting for client connection..............");

      while(true)
      {
         //当侦听到有用户端连接时,调用Accept以完成连接的操作
         theConnection = serverSocket.Accept();
         //显示用户端Socket的相关信息
         PrintClientInfo((IPEndPoint)theConnection.RemoteEndPoint);

         int bytes = 0;
         Byte[] RecvBytes = new Byte[256];

         while(true)
         {
            try
            {
               //读取用户端所送出来的数据
               bytes = theConnection.Receive(RecvBytes,RecvBytes.Length,0);
            }
            catch(SocketException se)
            {
               Console.WriteLine("Data receive error!!");
               break;
            }
            //若读取失败则退出循环
            if (bytes == 0)  break;

            try
            {
               //将所读取到的数据RecvBytes原封不动的送回
               theConnection.Send(RecvBytes,bytes,0);
            }
            catch(SocketException se)
            {
                Console.WriteLine("Data send error!!");
                break;
            }
         }
         //关闭与用户端的连接
         theConnection.Close();
         Console.WriteLine("Client is disconnect......");
      }

   }

   //显示用户端Socket信息的method  
   public static void PrintClientInfo(IPEndPoint clientEP)
   {
      //获取用户端Socket的IP地址
      IPAddress clientIP = clientEP.Address;
      Console.WriteLine("We have a client connected from IP:" +clientIP.ToString());  
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -