(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