2012-10-11 24 views
-1

我想在Azure中创建一个简单的客户端服务器。我有一个webrole客户端和另一个服务器,都属于同一个租户。 我想在两者之间使用简单的套接字通信从客户端发送一个虚拟文件到服务器。Azure中WebRole通信的套接字通信

这里是我写我的应用程序(一些代码为清楚起见移除):

1-定义的“内部” TCP为每个角色的端点。假设服务器的端口是9000客户端的端口是9010。

2-客户端发送一个虚拟文件服务器如下:

byte[] buffer = File.ReadAllBytes(filePath); 
mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); 
mSocket.Connect(IPAddress.Parse(serverIPString), 9000); 
mSocket.Send(buffer); 

3-在服务器上,我做了以下内容:

IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 9000); 
mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); 
mSocket.Bind(ipEnd); 
mSocket.Listen(BACKLOG); 
Socket socket = mSocket.Accept(); 
byte[] buffer = new byte[BUFFER_SIZE]; 
int byteCount = socket.Receive(buffer); 

当地的一切工作正常,在Azure的模拟器,但是当我去到云服务器没有得到任何连接:(

请帮帮忙!

附录:

有人问我如何找到我的终点。 我按照以下方式在服务器的主页上显示我的端点,并让发件人/客户端指定他们想要将文件发送到文本框中的IP。

foreach (var instance in RoleEnvironment.CurrentRoleInstance.Role.Instances) 
      foreach (KeyValuePair<string, RoleInstanceEndpoint> pair in instance.InstanceEndpoints) 
       addresses += "[" + pair.Key + "] " + pair.Value.IPEndpoint.Address + ":" + pair.Value.IPEndpoint.Port + ", "; 
+1

“没有什么作用”的确是非特定的。如果有例外,告诉我们它是什么。它在服务器端还是客户端?另外,如果你显示'serverIPString'来自哪里,它会有所帮助。 (发现内部端点的代码在哪里?) – smarx

+0

对不起。不,没有例外(正如我提到的,它在本地工作正常)。服务器只是没有从发送者/客户端获得任何连接。 – Hajjat

+0

另外,我在附录中添加了关于端点的描述。谢谢! – Hajjat

回答

0

您的服务器需要在等待连接的循环中。我不确定你是否只是将你的示例代码总结出来,或者如果那是缺少的。就您调用其操作的顺序而言,您对Socket接口的使用看起来是正确的。

希望这有助于http://msdn.microsoft.com/en-us/library/6y0e13d3.aspx

附录:没关系,只注意到Socket.Accept()可以暂停所以不应该有我在想,当我看着它的问题。

+0

是的,我有一个循环。感谢您的回复。 – Hajjat

0

这可能是一个网络/ IP问题,如防火墙或代码不能识别IP地址,而不是通过让通信。

+0

这就是我期待的。让我们看看是否有人遇到同样的问题,并找到了解决方案,这是杀了我..谢谢反正! – Hajjat