【问题标题】:Unity TCP client: connection to a serverUnity TCP 客户端:连接到服务器
【发布时间】:2022-01-16 13:13:34
【问题描述】:

我有一个将数据流式传输到 Windows 服务器的硬件,并且我有这个服务器的 IP 和端口。现在我想将统一应用程序作为 TCP 客户端连接到该服务器。我已经尝试了很多解决方案,但仍然很难找出最好的方法来做到这一点。非常感谢任何帮助。我在当前教程中遇到的一个问题是,它们中的大多数都定义了一个统一服务器,并尝试将另一个统一应用程序连接为客户端,并且主要基于 localhost。但是,我只想将一个统一应用程序作为 TCP 客户端连接到我拥有 IP 和端口的服务器。

热烈的问候, enter image description here

【问题讨论】:

  • 首先,您需要在 windows 服务器上打开端口,并且您需要一个服务,正如您所指的,它可以是 Unity 服务器本身。 Windows 服务器不理解除了 Windows 和管理的东西之外的任何东西,除非您打开该功能,或提供一个,在您的情况下默认情况下不可用。其次,在 stackoverflow 中,您需要尽可能直接地共享数据,例如在页面内共享图像(一开始您可能无权访问),并且提供一些代码来解释您是如何以及对于哪些数据是很重要的尝试通过提供一些代码来做到这一点。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: unity3d tcp ip client


【解决方案1】:

首先,在脚本的顶部:

using System;
using System.Net.Sockets;

然后,创建一个 TcpClient 实例并开始连接:

socket = new TcpClient
{
    // dataBufferSize is in bytes
    ReceiveBufferSize = dataBufferSize,
    SendBufferSize = dataBufferSize
};

socket.BeginConnect(ip, port, ConnectCallback, socket);

ConnectCallback():

private void ConnectCallback(IAsyncResult asyncResult)
{
    socket.EndConnect(asyncResult);
    if (!socket.Connected) return;
    // stream is a NetworkStream you should declare somewhere
    stream = socket.GetStream();
    // receiveBuffer is a byte[] you should declare somewhere
    receiveBuffer = new byte[dataBufferSize];
    stream.BeginRead(receiveBuffer, 0, dataBufferSize, ReceiveCallback, null);
}

ReceiveCallback():

private void ReceiveCallback(IAsyncResult asyncResult)
{
    try
    {
        int byteLength = stream.EndRead(asyncResult);
        if (byteLength <= 0)
        {
            // Disconnect client
            return;
        }

        // Transfer data from receiveBuffer to data variable for handling
        byte[] data = new byte[byteLength];
        Array.Copy(receiveBuffer, data, byteLength);
        // Handle data in any way you want to

        // BeginRead again so you can keep receiving data
        stream.BeginRead(receiveBuffer, 0, dataBufferSize, ReceiveCallback, null);
    }
    catch (Exception e)
    {
        Console.WriteLine($"Error receiving TCP data: {e.Message}");
    }
}

我从this tutorial 获得了此信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2019-06-06
    • 2019-06-18
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2015-08-21
    相关资源
    最近更新 更多