为unity3d和signalr实现套接字连接

时间:2017-01-06 18:06:13

标签: c# sockets unity3d signalr

我将通过连接到signalr的C#为unity3D实现一个socket客户端。这是我的代码:

public void StartClient()
{

    try
    {
        IPHostEntry ipHostInfo = Dns.GetHostEntry("http://www.MYURL.com/signalr/hubs");
        IPAddress ipAddress = ipHostInfo.AddressList[0];
        IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

        // Create a TCP/IP socket.
        Socket client = new Socket(AddressFamily.InterNetwork,
            SocketType.Stream, ProtocolType.Tcp);

        // Connect to the remote endpoint.
        client.BeginConnect(remoteEP,
            new AsyncCallback(ConnectCallback), client);

        client.Shutdown(SocketShutdown.Both);
        client.Close();
    }
    catch (Exception e)
    {
        print(e.ToString());
    }
}
private void ConnectCallback(IAsyncResult ar)
{
    try
    {
        // Retrieve the socket from the state object.
        Socket client = (Socket)ar.AsyncState;

        // Complete the connection.
        client.EndConnect(ar);

        print("Socket connected to "+client.RemoteEndPoint.ToString());

        // Signal that the connection has been made.
        //connectDone.Set();
    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }
}

但是当我调用StartClient()时,它会抛出这个:

System.Net.Sockets.SocketException: No such host is known.

在服务器端,每件事情都是正确的,并且处理信号器的HTML页面适用于基于浏览器的客户端。我将实现我自己的团结客户,但它不起作用..

我现在应该发送GET Request这样的内容:

GET /signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22chapter3hub%22%7D%5D&_=142051 HTTP/1.1

然后我应该从上述请求的响应中获取ConnectionID和ConnectionToken,并再次发送Post Reqeust以授权用户:

POST /signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=GaRyosG%2Fu1%2BU%2B9yusdn0lVb&connectionData=%5B%7B%22name%22%3A%22chapter3hub%22%7D%5D

但我不知道如何在unity3d和signalr之间创建一个连接,它位于我自己的服务器中?我应该使用套接字还是像长轮询一样?

1 个答案:

答案 0 :(得分:1)

SignalR 2.x是基于HTTP的。从您的代码中很难分辨出您使用的端口,但问题可能是您没有使用端口80.然后您尝试使用webSocket传输但是为此您需要真正使用webSocket客户端(除非您还想实现你自己的webSocket协议并不简单)。 如果你真的想写SignalR客户端,请点击这里: