分为客户端与服务端,无论那端都需要使用Net库里的Socket
客户端:
1、创建服务地址与端口字段
2、创建套接字
3、连接服务器
4、发送数据
5、接受服务端响应
6、关闭套接字
using UnityEngine;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class ClientSocket : MonoBehaviour
{
private Socket clientSocket;
private void Start()
{
// 服务器地址和端口
string serverAddress = "127.0.0.1";
int serverPort = 5000;
// 创建TCP/IP套接字
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 连接服务器
clientSocket.Connect(serverAddress, serverPort);
// 发送数据
string message = "Hello, server!";
byte[] data = Encoding.UTF8.GetBytes(message);
clientSocket.Send(data);
// 接收服务器的响应
byte[] buffer = new byte[1024];
int bytesRead = clientSocket.Receive(buffer);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Debug.Log("Server response: " + response);
// 关闭套接字连接
clientSocket.Close();
}
}
服务端:
1、创建服务地址与端口字段
2、创建套接字
3、绑定服务器地址与端口
4、开始监听
5、在新线程处理客户端连接
6、收发数据
7、发送响应客户端
using UnityEngine;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
public class ServerSocket : MonoBehaviour
{
private Socket serverSocket;
private void Start()
{
// 服务器地址和端口
string serverAddress = "127.0.0.1";
int serverPort = 5000;
// 创建TCP/IP套接字
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 绑定服务器地址和端口
serverSocket.Bind(new IPEndPoint(IPAddress.Parse(serverAddress), serverPort));
// 开始监听连接
serverSocket.Listen(1);
Debug.Log("Waiting for a client to connect...");
// 在新的线程中处理客户端连接
Thread thread = new Thread(ListenForClients);
thread.Start();
}
private void ListenForClients()
{
while (true)
{
// 等待客户端连接
Socket clientSocket = serverSocket.Accept();
Debug.Log("Client connected: " + clientSocket.RemoteEndPoint);
// 在新的线程中处理客户端通信
Thread clientThread = new Thread(HandleClientCommunication);
clientThread.Start(clientSocket);
}
}
private void HandleClientCommunication(object clientSocketObj)
{
Socket clientSocket = (Socket)clientSocketObj;
try
{
// 接收客户端发送的数据
byte[] buffer = new byte[1024];
int bytesRead = clientSocket.Receive(buffer);
string data = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Debug.Log("Received data: " + data);
// 发送响应给客户端
string response = "Hello, client!";
byte[] responseData = Encoding.UTF8.GetBytes(response);
clientSocket.Send(responseData);
}
catch (Exception e)
{
Debug.Log("Error handling client communication: " + e.Message);
}
finally
{
// 关闭客户端连接
clientSocket.Close();
}
}
}