网络功能期望委托,传递它但是说未知的成员

时间:2016-02-04 08:53:22

标签: c# .net sockets unity3d

我试图在Node.js服务器和Unity Android游戏之间进行简单的客户端 - 服务器通信,但是我在试图弄清楚我为什么要编写代码时遇到了问题不起作用。

在游戏中,我使用.NET Socket类,因为所需的功能非常简单,但是当传递一个名为" ReceiveData"到函数BeginReceive(这个函数需要一个委托),它会抛出一个错误。但是在调试时,它表示函数" ReceiveData"是一个不知名的成员,但它在那里!该图像显示了代码片段和这个奇怪的错误。

可能有人帮我弄清楚如何解决这个问题,或者向我解释发生了什么。我在这个论坛和其他论坛上搜索了很多相似的问题,但是没有成功。

Monodevelop image

Code fragment image (consulta.png)

public class AccountManager : Singleton<AccountManager>
{
    [...]

    private void Initialize()
    {
        // Configurar conexión
        this.clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp  );  
        this.clientSocket.Connect(AccountManager.serverAddress, AccountManager.port);

        // Empezar a recibir datos
        this.clientSocket.BeginReceive(this.receivedDataBuffer, 0, this.receivedDataBuffer.Length, SocketFlags.None,
                                       this.ReceiveData, null);
    }

    private void ReceiveCommand(string command) {...}

    public void ReceiveData(IAsyncResult asyncResult)
    {
        // Comprobar longitud de respuesta
        int responseLength = this.clientSocket.EndReceive(asyncResult);
        if (responseLength <= 0) return;

        // Copiar datos recibidos en array local
        byte[] responseData = new byte[responseLength];
        Buffer.BlockCopy(this.receivedDataBuffer, 0, responseData, 0, responseLength);

        // Procesar datos
        this.ReceiveCommand(Encoding.UTF8.GetString(responseData));

        // Empezar a recibir otra vez
        this.clientSocket.BeginReceive(this.receivedDataBuffer, 0, this.receivedDataBuffer.Length,
            SocketFlags.None, new AsyncCallback(this.ReceiveData), null);
    }

    private void SendCommand(string command) {...}

    private void Awake()
    {
        this.Initialize();
    }

    private void OnDestroy()
    {
        this.clientSocket.Shutdown(SocketShutdown.Both);
        this.clientSocket.Close();
    }
}

1 个答案:

答案 0 :(得分:0)

我已经解决了我的问题。

我现在正在使用System.Net.Sockets.TcpClient类,它更易于使用且更可靠。

$valid = FALSE;
@exec("gm identify +ping filename", $result);
if (is_array($result)) {
    if (in_array("MVG", explode(" ", implode(" ", $result))) || in_array("SVG", explode(" ", implode(" ", $result)))) $valid = TRUE;
}

这种方式可以通过使用流轻松进行通信。