客户端代码:
using System;
using System.Threading;
using System.Net.Sockets;
namespace ConsoleApp1
{
class Program
{
private const string IP = "127.0.0.1";
private const int PORT = 6688;
private Socket clientSocket;
private byte[] data = new byte[1024];
static Program p = new Program();
static void Main(string[] args)
{
Console.WriteLine("Start");
p.clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
p.clientSocket.Connect(IP, PORT);
p.clientSocket.BeginReceive(p.data, 0,p.data.Length, SocketFlags.None, p.CallBack, null);
}
private void CallBack(IAsyncResult ar)
{
p.clientSocket.EndReceive(ar);
Console.WriteLine(System.Text.Encoding.UTF8.GetString(p.data));
}
}
}
服务器代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
namespace ServerTest
{
class Program
{
private IPEndPoint ipEndPoint;
private Socket serverSocket;
private Socket clientSocket;
static Program p = new Program();
private byte[] data = new byte[1024];
static void Main(string[] args)
{
p.ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6688);
p.serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
p.serverSocket.Bind(p.ipEndPoint);
p.serverSocket.Listen(0);
p.serverSocket.BeginAccept(p.CallBack, null);
Console.WriteLine("服务器接收到了响应");
Console.ReadLine();
}
private void CallBack(IAsyncResult ar)
{
clientSocket = serverSocket.EndAccept(ar);
clientSocket.Send(Encoding.UTF8.GetBytes("接收到了"));
serverSocket.BeginAccept(p.CallBack, null);
}
}
}
效果:客户端的连接服务器后,服务器端会出现“服务器接收到了响应”,同时客户端会出现服务器端发送过来的信息“接收到了”。
总结:
Socket TCP客户端连接服务器的简单流程:
客户端:创建Socket,连接IP和端口,开启异步消息接收(BeginReceive),消息到达后会直接写入创建的缓存byte数组中。
服务器:创建Socket,绑定IP和端口,开启监听状态,开启异步消息接收(BeginAccept),接收到客户端消息后,向客户端发送回复消息,客户端接收到服务器的消息,并写入创建的缓存byte数组中。