Unity TCP 客户端:连接到服务器

Posted

技术标签:

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

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

热烈的问候, enter image description here

【问题讨论】:

var client = new TcpClient("IP.ad.dre.ss", portNumber); ...? 首先,您需要在 windows 服务器上打开端口,并且您需要一个服务,正如您所指的,它可以是 Unity 服务器本身。 Windows 服务器不理解除了 Windows 和管理的东西之外的任何东西,除非您打开该功能,或提供一个,在您的情况下默认情况下不可用。其次,在 *** 中,您需要尽可能直接地共享数据,例如在页面内共享图像(一开始您可能无权访问),并且提供一些代码来解释您是如何以及对于哪些数据是很重要的尝试通过提供一些代码来做到这一点。 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案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 获得了此信息。

【讨论】:

以上是关于Unity TCP 客户端:连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何从未知服务器连接到客户端计算机上的开放 tcp 端口?

如何使用Docker Compose将容器A中的Node.js TCP客户端连接到容器B中的TCP服务器?

计算出有多少客户端可以连接到我正在使用的一些 tcp 服务器代码

从外部IP将TCP客户端连接到我的服务器

如果没有服务器准备好,tcp 客户端在连接到 localhost 时不会抛出错误

如何将TCP连接重新连接到同一端口?