using UnityEngine;
using System.Net.Sockets;
using System.Text;
using ToneTuneToolkit.Common;
///
/// TCP发图片和文本
///
public class TCPClient : SingletonMaster
{
public string serverIP = "192.168.1.100"; // Windows服务器的IP地址
public int serverPort = 1006;
private TcpClient client;
private NetworkStream stream;
// ==================================================
private void Start() => Init();
private void OnDestroy() => UnInit();
// ==================================================
private void Init()
{
// Connect();
}
private void UnInit()
{
Disconnect();
}
// ==================================================
public void SetServerIP(string value) => serverIP = value;
public void SetServerPort(string value) => serverPort = int.Parse(value);
// ==================================================
// 连接到服务器
public void Connect()
{
try
{
client = new TcpClient();
client.Connect(serverIP, serverPort);
stream = client.GetStream();
Debug.Log("[TCP]Connected to server");
}
catch (System.Exception e)
{
Debug.LogError("[TCP]Connection error: " + e.Message);
}
}
// 断开连接
public void Disconnect()
{
if (stream != null) { stream.Close(); }
if (client != null) { client.Close(); }
Debug.Log("[TCP]Disconnected from server");
}
// 发送文本消息
public void SendText(string message)
{
if (client == null || !client.Connected) { return; }
try
{
byte[] textBytes = Encoding.UTF8.GetBytes(message);
byte[] lengthBytes = System.BitConverter.GetBytes(textBytes.Length);
byte[] dataType = new byte[] { 0 }; // 0 = text
stream.Write(lengthBytes, 0, 4);
stream.Write(dataType, 0, 1);
stream.Write(textBytes, 0, textBytes.Length);
Debug.Log("[TCP]Sent text: " + message);
}
catch (System.Exception e)
{
Debug.LogError("[TCP]Send text error: " + e.Message);
}
}
// 发送图片
public void SendImage(Texture2D texture)
{
if (client == null || !client.Connected) { Debug.LogWarning("Not connected to server"); return; }
try
{
byte[] imageBytes = texture.EncodeToPNG();
byte[] lengthBytes = System.BitConverter.GetBytes(imageBytes.Length);
byte[] dataType = new byte[] { 1 }; // 1 = image
stream.Write(lengthBytes, 0, 4);
stream.Write(dataType, 0, 1);
stream.Write(imageBytes, 0, imageBytes.Length);
Debug.Log("[TCP]Sent image with size: " + texture.width + "x" + texture.height);
}
catch (System.Exception e)
{
Debug.LogError("[TCP]Send image error: " + e.Message);
Disconnect();
}
}
}