Introduire des références
using System.Net;
using System.Net.Sockets;
using System.Threading;
Serveur
Créez un socket, liez le port, définissez le nombre maximum de connexions et démarrez un thread pour surveiller s'il existe une connexion client.
//监听套接字 前台
static Socket listenSocket;
//保存连接的客户端
static List<Socket> clientSockets = new List<Socket>();
static void Main(string[] args)
{
//创建监听套接字
listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定端口
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5555);
listenSocket.Bind(ip);
//设定一个监听的最大数量
listenSocket.Listen(10);
//开启线程
Thread thread = new Thread(Listen);
//设置为后台线程
thread.IsBackground = true;
thread.Start();
Console.ReadKey();
}
Écoutez le port, enregistrez le nouveauSocket du client connecté et ouvrez un fil de discussion pour surveiller les messages du client.
static void Listen()
{
//开始监听
Console.WriteLine("开始监听");
while (true)
{
Socket newSocket = listenSocket.Accept();
Console.WriteLine("有客户端链接");
//创建线程监听客户端发送的消息
Thread thread = new Thread(ReceiveMessage);
thread.IsBackground = true;
thread.Start(newSocket);
//告诉其他客户端有客户端链接了
foreach (Socket socket in clientSockets)
{
socket.Send(new UTF8Encoding().GetBytes(newSocket.RemoteEndPoint.ToString() + ":已上线!"));
}
//保存客户端
clientSockets.Add(newSocket);
}
}
recevoir des messages
static void ReceiveMessage(object obj)
{
Socket newSocket = (Socket)obj;
while (true)
{
try
{
//监听消息
byte[] bs = new byte[1024];
int num=newSocket.Receive(bs);
Console.WriteLine(newSocket.RemoteEndPoint.ToString() + ":" + new UTF8Encoding().GetString(bs));
byte[] bs2 = new byte[num];
for(int i = 0; i < num; i++)
{
bs2[i] = bs[i];
}
SentToOther(newSocket, bs2);
}
catch
{
Console.WriteLine(newSocket.RemoteEndPoint.ToString() + ":客户端断开");
clientSockets.Remove(newSocket);
return;
}
}
}
Envoyer des messages à d'autres clients
static void SentToOther(object obj, byte[] bs)
{
Socket newSocket = (Socket)obj;
foreach (Socket socket in clientSockets)
{
byte[] mes = new UTF8Encoding().GetBytes(newSocket.RemoteEndPoint.ToString() + ":" + new UTF8Encoding().GetString(bs));
Console.WriteLine(mes.Length);
socket.Send(mes);
}
}
client
Créez un socket client, connectez-vous au serveur et démarrez un thread pour écouter les messages du serveur.
static Socket socket;
static void Main(string[] args)
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//创建要链接的ip
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 5555);
//连接
socket.Connect(ip);
//开启监听消息线程
Thread thread = new Thread(ReceiveMessage);
thread.IsBackground = true;
thread.Start();
while (true)
{
string content = Console.ReadLine();
//发送消息
socket.Send(new UTF8Encoding().GetBytes(content));
}
Console.ReadKey();
}
Écoutez les messages envoyés depuis le serveur
static void ReceiveMessage()
{
while (true)
{
//接收服务端发来的消息
byte[] bs = new byte[1024];
int i=socket.Receive(bs);
string str = new UTF8Encoding().GetString(bs);
Console.WriteLine("服务端:"+new UTF8Encoding().GetString(bs));
}
}