我将通过连接到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之间创建一个连接,它位于我自己的服务器中?我应该使用套接字还是像长轮询一样?
答案 0 :(得分:1)
SignalR 2.x是基于HTTP的。从您的代码中很难分辨出您使用的端口,但问题可能是您没有使用端口80.然后您尝试使用webSocket传输但是为此您需要真正使用webSocket客户端(除非您还想实现你自己的webSocket协议并不简单)。 如果你真的想写SignalR客户端,请点击这里: