web-dev-qa-db-ja.com

.NETおよびXamarinを使用したサーバークライアントアプリケーション

私はインターネットを何時間も検索しましたが、私の場合に一致するものは見つかりませんでした。

TCPまたはUDPを使用してサーバー/クライアントアプリを実装したいだけです。ここで、私のAndroidアプリ(Xamarin)はサーバーとして機能し、.NETアプリケーションはクライアントとして機能します。私はアプリ開発の経験があまりなく、Xamarinの経験もないので、例を探していました。私が見つけたのはこれだけでした。

http://www.codeproject.com/Articles/340714/Android-How-to-communicate-with-NET-application-vi

まず、これは逆の方法(.NET上のサーバーとアプリとしてのクライアント)であり、さらにAndroid Studio用であるため、これらをエラーなしでXamarinに変換するのは困難です。

誰かが私の問題を実現する方法の例を教えてくれますか?

ありがとうございました!

10
Canox

Xamarin.Androidでは、通常の.Netソケットクラスをすべて使用できます。

名前空間:

using System.Net;
using System.Net.Sockets;

例:

IPHostEntry ipHostInfo = Dns.GetHostEntry (Dns.GetHostName ());
IPAddress ipAddress = ipHostInfo.AddressList [0];
IPEndPoint localEndPoint = new IPEndPoint (ipAddress, 11000);
System.Diagnostics.Debug.WriteLine(ipAddress.ToString());
// Create a TCP/IP socket.
Socket listener = new Socket (AddressFamily.InterNetwork,
                     SocketType.Stream, ProtocolType.Tcp);

AndroidManifest.xml必要な権限は次のとおりです。

<uses-permission Android:name="Android.permission.INTERNET"></uses-permission>

MSDNベースの 非同期サーバーソケット の例は、変更なしでカット/ペーストの例として機能します。

つまり.

MSDNコードを使用すると、スレッドで静的メソッドAsynchronousSocketListener.StartListeningを呼び出して、AsynchronousSocketListenerクラスで定義されたポート11000でリッスンを開始できます。

new Thread (new ThreadStart (delegate {
    AsynchronousSocketListener.StartListening();
})).Start ();

デバイス/エミュレーターで実行されたら、Android TCPソケットサーバー:


>telnet 10.71.34.100 11000

Trying 10.71.34.100...
Connected to 10.71.34.100.
Escape character is '^]'.

接続したら、This is a test<EOF>と入力すると、Androidがエコーバックします:

This is a test<EOF>
9
SushiHangover

これは通常の.netと同じように行いますが、ソケットを使用するためのアクセス許可を要求する必要があります。

C#でリスニングTCP接続を作成する簡単な例はたくさんあります。

あなたが抱える問題は、ユーザーが移動しているときに頻繁に変更される可能性があるため、(電話内の)サーバーのIPアドレスを知ることです。

2
Softlion