using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using UnityEngine;
public class SocketU3d : MonoBehaviour
{
private Socket clientSocket;
private byte[] receiveBuffer = new byte[1024];
private void Start()
{
// 创建客户端Socket
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 连接服务器
string serverIP = "127.0.0.1"; // 服务器IP地址
int serverPort = 8888; // 服务器端口
ConnectToServer(serverIP, serverPort);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
{
SendMessageToServer("11111");
}
else
if (Input.GetKeyDown(KeyCode.Alpha2))
{
SendMessageToServer("22222");
}
}
private void ConnectToServer(string serverIP, int serverPort)
{
try
{
// 创建服务器地址对象
IPAddress ipAddress = IPAddress.Parse(serverIP);
IPEndPoint serverEndPoint = new IPEndPoint(ipAddress, serverPort);
// 连接服务器
clientSocket.BeginConnect(serverEndPoint, ConnectCallback, null);
}
catch (Exception ex)
{
Debug.LogError("Failed to connect to server: " + ex.Message);
}
}
private void ConnectCallback(IAsyncResult result)
{
try
{
// 结束连接操作
clientSocket.EndConnect(result);
// 开始接收服务器消息
StartReceiving();
}
catch (Exception ex)
{
Debug.LogError("Failed to connect callback: " + ex.Message);
}
}
private void StartReceiving()
{
try
{
// 异步接收服务器消息
clientSocket.BeginReceive(receiveBuffer, 0, receiveBuffer.Length, SocketFlags.None, ReceiveCallback, null);
}
catch (Exception ex)
{
Debug.LogError("Failed to start receiving: " + ex.Message);
}
}
private void ReceiveCallback(IAsyncResult result)
{
try
{
// 结束接收操作
int bytesRead = clientSocket.EndReceive(result);
if (bytesRead > 0)
{
// 处理接收到的消息
string message = System.Text.Encoding.UTF8.GetString(receiveBuffer, 0, bytesRead);
Debug.Log("Received message from server: " + message);
// 继续接收消息
StartReceiving();
}
else
{
// 连接断开,关闭客户端Socket
clientSocket.Close();
}
}
catch (Exception ex)
{
Debug.LogError("Failed to receive callback: " + ex.Message);
}
}
private void SendMessageToServer(string message)
{
try
{
// 将消息转换为字节数组
byte[] data = System.Text.Encoding.UTF8.GetBytes(message);
// 发送消息给服务器
clientSocket.BeginSend(data, 0, data.Length, SocketFlags.None, SendCallback, null);
}
catch (Exception ex)
{
Debug.LogError("Failed to send message to server: " + ex.Message);
}
}
private void SendCallback(IAsyncResult result)
{
try
{
// 结束发送操作
int bytesSent = clientSocket.EndSend(result);
Debug.Log("Sent " + bytesSent + " bytes to server.");
}
catch (Exception ex)
{
Debug.LogError("Failed to send callback: " + ex.Message);
}
}
}