-1

我正在尝试在 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 + ", ";
4

2 回答 2

0

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

于 2012-10-11T23:12:35.210 回答
0

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

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

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

于 2012-10-11T23:07:51.500 回答