简易tcpserver拷贝即用:
SingletonBase看这里Unity实用单例 and MonoBehaviour单例-CSDN博客
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
public class TcpServer : SingletonBase<TcpServer>
{
private TcpListener _tcpListener;
private TcpClient _tcpClient;
private Thread _listenerThread;
Thread _clientThread;
public void StartServer()
{
if (_tcpListener != null)
{
return;
}
_tcpListener = new TcpListener(IPAddress.Any, 9786);
_listenerThread = new Thread(new ThreadStart(ListenForClients));
_listenerThread.Start();
}
public void StopServer()
{
if(_listenerThread != null)_listenerThread.Abort();
if(_clientThread != null)_clientThread.Abort();
if(_tcpListener != null)_tcpListener.Stop();
_tcpListener = null;
_listenerThread = null;
_clientThread = null;
}
private void ListenForClients()
{
_tcpListener.Start();
Debug.Log("ListenForClients");
while (true)
{
// 等待客户端连接
_tcpClient = _tcpListener.AcceptTcpClient();
if (_tcpClient!= null)
{
Debug.Log("new clientThread ");
// 开启新线程处理客户端
if (_clientThread != null) _clientThread.Abort();
_clientThread = new Thread(ClientConnect);
_clientThread.Start(_tcpClient);
}
}
}
private void ClientConnect(object clientObj)
{
TcpClient tcpClient = (TcpClient)clientObj;
NetworkStream clientStream = tcpClient.GetStream();
byte[] messageBuffer = new byte[1024];
while (true)
{
int bytesRead = clientStream.Read(messageBuffer, 0, messageBuffer.Length);
if (bytesRead == 0)
{
// 客户端断开连接
break;
}
string receivedData = Encoding.ASCII.GetString(messageBuffer, 0, bytesRead);
Debug.Log("receivedData = " + receivedData);
if (receivedData == "1001")
{
Debug.Log("start doing ...");
}
else if (receivedData == "1002")
{
Debug.Log("stop ");
}
}
tcpClient.Close();
}
}