服务端代码[掌握台示例]
static List<Socket> Sockets = new List<Socket>();
static void Main(string[] args)
{
int port = 10;
byte[] buffer = new byte[1024];
IPEndPoint localEP = new IPEndPoint(IPAddress.Any, port);
Socket listener = new Socket(localEP.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEP);
listener.Listen(10);
Console.WriteLine("期待客户端衔接....");
while (true) //该操作用于多个客户端衔接
{
Socket sc = listener.Accept();//接收一个衔接
Sockets.Add(sc); //将衔接的客户端, 添加到内存当中
Thread t = new Thread(new ThreadStart(() => ReceiveData(sc))); //开启当前Socket线程, 去履行获得数据的动作,与客户端通讯
t.IsBackground = true;
t.Start();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.ReadLine();
}
public static void ReceiveData(Socket sc)
{
byte[] buffer = new byte[1024];
Console.WriteLine("接收到了客户端:" + sc.RemoteEndPoint.ToString() + "衔接....");
//握手
int length = sc.Receive(buffer);//接收客户端握手信息
sc.Send(PackHandShakeData(GetSecKeyAccetp(buffer, length)));while (true)
{
try
{
//接收客户端数据
Console.WriteLine("期待客户端数据....");
length = sc.Receive(buffer);//接收客户端信息
string clientMsg = AnalyticData(buffer, length);
Console.WriteLine("接收到客户端数据:" + clientMsg);
//发送数据
string sendMsg = "服务端返回信息:" + clientMsg;
sc.Send(PackData(sendMsg));
}
catch (Exception ex)
{
Sockets.Remove(sc); //如果吸收的进程中,断开, 那末内存中移除当前Socket对象, 并且退出当前线程
Console.WriteLine("客户端已断开衔接!");
return;
}
}
}static List<Socket> Sockets = new L