(client) feat:添加网络类Network
This commit is contained in:
6
Client/.vsconfig
Normal file
6
Client/.vsconfig
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"components": [
|
||||
"Microsoft.VisualStudio.Workload.ManagedGame"
|
||||
]
|
||||
}
|
150
Client/Assets/Scripts/Utils/Network.cs
Normal file
150
Client/Assets/Scripts/Utils/Network.cs
Normal file
@ -0,0 +1,150 @@
|
||||
using System;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Utils
|
||||
{
|
||||
public class Network : Singleton<Network>
|
||||
{
|
||||
private TcpClient _tcpClient;
|
||||
public bool IsConnected => _tcpClient?.Connected ?? false;
|
||||
|
||||
/// <summary>
|
||||
/// 尝试连接到指定的地址和端口
|
||||
/// </summary>
|
||||
/// <param name="address">服务器地址</param>
|
||||
/// <param name="port">端口号</param>
|
||||
/// <returns>连接是否成功</returns>
|
||||
public bool Connect(string address, int port)
|
||||
{
|
||||
if (IsConnected)
|
||||
{
|
||||
Debug.LogWarning("Already connected to a server.");
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 创建一个新的 TcpClient 实例
|
||||
_tcpClient = new TcpClient();
|
||||
|
||||
// 尝试连接到指定的地址和端口
|
||||
_tcpClient.Connect(address, port);
|
||||
|
||||
// 如果连接成功
|
||||
if (IsConnected)
|
||||
{
|
||||
Debug.Log($"Successfully connected to server at {address}:{port}");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (SocketException ex)
|
||||
{
|
||||
Debug.LogError($"Failed to connect to server at {address}:{port}. Error: {ex.Message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"An unexpected error occurred: {ex.Message}");
|
||||
}
|
||||
|
||||
// 如果发生任何错误或连接失败
|
||||
Disconnect();
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 断开与服务器的连接
|
||||
/// </summary>
|
||||
public void Disconnect()
|
||||
{
|
||||
if (!IsConnected)
|
||||
{
|
||||
Debug.LogWarning("Not currently connected to any server.");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 关闭 TcpClient 连接
|
||||
_tcpClient?.Close();
|
||||
|
||||
Debug.Log("Disconnected from the server.");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Error while disconnecting: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送数据到服务器
|
||||
/// </summary>
|
||||
/// <param name="message">要发送的消息</param>
|
||||
public void Send(string message)
|
||||
{
|
||||
if (!IsConnected)
|
||||
{
|
||||
Debug.LogError("Cannot send data. Not connected to any server.");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 获取网络流
|
||||
NetworkStream stream = _tcpClient.GetStream();
|
||||
|
||||
// 将消息转换为字节数组
|
||||
byte[] data = Encoding.UTF8.GetBytes(message);
|
||||
|
||||
// 发送数据
|
||||
stream.Write(data, 0, data.Length);
|
||||
|
||||
Debug.Log($"Sent message to server: {message}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Error while sending: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 接收来自服务器的数据
|
||||
/// </summary>
|
||||
/// <returns>接收到的消息</returns>
|
||||
public string Receive()
|
||||
{
|
||||
if (!IsConnected)
|
||||
{
|
||||
Debug.LogError("Cannot receive data. Not connected to any server.");
|
||||
return null;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// 获取网络流
|
||||
NetworkStream stream = _tcpClient.GetStream();
|
||||
|
||||
// 检查是否有可用数据
|
||||
if (stream.DataAvailable)
|
||||
{
|
||||
// 读取数据
|
||||
byte[] buffer = new byte[1024];
|
||||
int bytesRead = stream.Read(buffer, 0, buffer.Length);
|
||||
|
||||
// 将字节数组转换为字符串
|
||||
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
|
||||
|
||||
Debug.Log($"Received message from server: {message}");
|
||||
return message;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogError($"Error while receiving: {ex.Message}");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
2
Client/Assets/Scripts/Utils/Network.cs.meta
Normal file
2
Client/Assets/Scripts/Utils/Network.cs.meta
Normal file
@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3cfed6461b8d6714bbc44fdac509c880
|
Reference in New Issue
Block a user