1、客户端
using System.Net;
using System.Text;
using UnityEngine;
using System;
using System.Threading;
public class Client : MonoBehaviour
{
private Socket socket;
private void Start()
{
CreateClient();
}
void CreateClient()
{
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 12345);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(localEndPoint);
Thread thread = new Thread(ReceiveMessage);
thread.Start();
}
private void ReceiveMessage(object obj)
{
while (true)
{
byte[] buffer = new byte[1024];
int bytesRec = socket.Receive(buffer);
string data = Encoding.UTF8.GetString(buffer, 0, bytesRec);
print(data);
}
}
public void SendMethod(string name)
{
// 发送数据
string message = "Hello:"+name;
byte[] msg = Encoding.UTF8.GetBytes(message);
socket.Send(msg);
}
}
2、服务器端
using System.Collections.Generic;
using System.Net.Sockets;
using System.Net;
using System.Text;
using UnityEngine;
using System.Threading;
public class Server : MonoBehaviour
{
private Socket listener;
private Dictionary<string, Socket> clientSockets = new Dictionary<string, Socket>();
void Start()
{
CreateServer();
}
void CreateServer()
{
listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 12345);
listener.Bind(localEndPoint);
listener.Listen(0);
Thread thread = new Thread(Listen);
thread.IsBackground = true;
thread.Start();
}
void Listen()
{
while (true)
{
Socket handler = listener.Accept();
byte[] buffer = new byte[1024];
int bytesRec = handler.Receive(buffer);
string data = Encoding.UTF8.GetString(buffer, 0, bytesRec);
print($"Received: {data}");
//开个线程接收数据
Thread thread = new Thread(ReceiveMessage);
thread.IsBackground = true;//设置为后台线程,主线程停止后,开始线程停止。
thread.Start(handler);
//保存客户端
if (!clientSockets.ContainsKey(handler.RemoteEndPoint.ToString()))
{
clientSockets.Add(handler.RemoteEndPoint.ToString(), handler);
}
}
}
void ReceiveMessage(object obj)
{
Socket newSocket = (Socket)obj;
while (true)
{
try
{
byte[] buffer = new byte[1024];
int bytesRec = newSocket.Receive(buffer);
string data = Encoding.UTF8.GetString(buffer, 0, bytesRec);
Debug.Log((newSocket.RemoteEndPoint.ToString() + "#" + data));
SendMessageMethod(newSocket.RemoteEndPoint.ToString() + "#" + data);
}
catch
{
}
}
}
//广播消息
void SendMessageMethod(string message)
{
byte[] bs = new byte[1024];
byte[] msg = Encoding.ASCII.GetBytes(message);
foreach (var item in clientSockets)
{
item.Value.Send(msg);
}
}
关闭连接
//handler.Shutdown(SocketShutdown.Both);
//handler.Close();
//停止线程
// 在需要的时候停止线程
//thread.Abort();
//休眠线程
//在需要的时候休眠线程里执行--毫秒
//Thread.Sleep(1000);
//操作同一个数据的时候要加个锁
// lock(obj)
// {
//操作的数据
// }
}