-1

Azure で単純なクライアント サーバーを作成しようとしています。クライアントを 1 つの webrole に、サーバーを別の webrole に持っており、両方が同じテナントに属しています。2 つの間の単純なソケット通信を使用して、ダミー ファイルをクライアントからサーバーに送信したいと考えています。

これが私のアプリの書き方です(わかりやすくするために一部のコードを削除しました):

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

サーバーは、接続を待っているループになっている必要があります。サンプルコードのためにそれを要約しただけなのか、それともそれが欠けているのかはわかりません。Socket インターフェースの使用は、その操作を呼び出す順序に関しては正しいように見えます。

これが役立つことを願っていますhttp://msdn.microsoft.com/en-us/library/6y0e13d3.aspx

補遺: 気にしないでください。Socket.Accept() が一時停止していることに気付いたので、私がそれを見たときに考えていた問題は発生しないはずです。

于 2012-10-11T23:07:51.500 に答える
0

これは、ファイアウォールやコードが IP を認識せず、通信を許可しないなどのネットワーク/IP の問題である可能性があります。

于 2012-10-11T23:12:35.210 に答える