用于Azure中的WebRole间通信的套接字通信

时间:2012-10-11 23:00:31

标签: c# sockets azure tcp cloud

我正在尝试在Azure中创建一个简单的客户端服务器。我将客户端放在一个webrole中,将服务器放在另一个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 + ", ";

2 个答案:

答案 0 :(得分:0)

您的服务器需要处于循环中等待连接。我不确定您是否只是为您的示例代码总结了这一点,或者是否是缺少的。对于调用其操作的顺序,您对Socket接口的使用看起来是正确的。

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

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

答案 1 :(得分:0)

这可能是网络/ IP问题,如防火墙或代码无法识别IP而不允许通信。