日常整理-C#制作服务器端(1)

项目创建选项,C#控制台应用程序

需要引用

using System.Net.Scokets;
using System.Net;

创建服务器端Socket

Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");//注册ip
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1121);//ip绑定端口
serverSocket.Bind(ipEndPoint);//关联起来
serverSocket.Listen(0);//处理连接的队列,0代表无限制

为了测试新建一个控制台应用作为客户端

Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 1121);
clientSocket.Connect(ipEndPoint);//建立与远程主机的连接

初级测试:

服务器端给客户端发送消息

Socket clientSocket= serverSocket.Accept();//接收一个客户端连接.如果监听到客户端,才继续执行
clientSocket.Send(System.Text.Encoding.UTF8.GetBytes("Hello client.你好。。。"));

服务器端接收客户端发送过来的消息

byte[] dataBuffer = new byte[1024];
int count= clientSocket.Receive(dataBuffer);
string msgReceive = System.Text.Encoding.UTF8.GetString(dataBuffer,0,count);
Console.WriteLine(msgReceive);

高级版:

关键字异步

BeginAccept    EndAccept
BeginReceive   EndReceive
//异步发送
serverSocket.BeginAccept(AcceptAsyncCallback, serverSocket);

static byte[] dataBuffer = new byte[1024];

start void AcceptAsyncCallback(IAsyncResult ar)
{
    Socket mServerSocket = ar.AsyncState as Socket;
    Socket mClientSocket= mServerSocket.EndAccept(ar);
    
//发送消息
    mClientSocket.Send(System.Text.Encoding.UTF8.GetBytes("Hi client.你好。。。"));
//异步接收消息
    mClientSocket.BeginReceive(dataBuffer, 0, dataBuffer.Length, SocketFlags.None, asyncCallback, mClientSocket);
    mServerSocket.BeginAccept(AcceptAsyncCallback, mServerSocket);
}

start void asyncCallback(IAsyncResult ar)
{
    Socket mClientSocket = null;
    try
       {
         mClientSocket = ar.AsyncState as Socket;
         int count = mClientSocket.EndReceive(ar);
         if (count==0)
         {
              mClientSocket.Close();
              return;
         }
         Console.WriteLine("接收消息:" + System.Text.Encoding.UTF8.GetString(dataBuffer, 0, count));
         mClientSocket.BeginReceive(dataBuffer, 0, dataBuffer.Length, SocketFlags.None, asyncCallback, mClientSocket);
       }
    catch (Exception)
       {
          Console.WriteLine("一个远程主机强迫下线了");
          if (mClientSocket!=null)
          {
              mClientSocket.Close();
          }
       }
}

猜你喜欢

转载自blog.csdn.net/huangzhenxun/article/details/83348646