私の Android アプリケーションでは、Wifi 接続 (UDP および TCP) からデータを取得する必要があります。
UDPのコードは次のとおりです。
try {
// Create new UDP-Socket
socket = new DatagramSocket(SERVERPORT);
while (isRunning) {
byte[] buf = new byte[50];
DatagramPacket packet = new DatagramPacket(buf,
buf.length);
socket.receive(packet);
String str = new String(buf, 0, packet.getLength());
packet.setLength(buf.length);
Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putString("getStr", str);
msg.setData(b);
handler.sendMessage(msg);
}
および TCP の場合:
try {
s = new Socket(SERVERIP, SERVERPORT);
BufferedReader in = new BufferedReader(
new InputStreamReader(s.getInputStream()));
while (!s.isClosed()) {
String strTcp = in.readLine().toString();
Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putString("getStr", strTcp + "\n");
msg.setData(b);
handler.sendMessage(msg);
}
正常に動作しますが、私の問題は次のとおりです。
私の Wifi デバイスは一連のデータ (常に同じ文字列のシーケンス) を送信し、TCP で 1250 個の文字列を受信すると、UDP では 400 個の文字列しか受信しません。通常、UDP は TCP よりも高速に動作していませんか?
IPhone で同じテストを試してみたところ、正常に動作し、UDP は TCP と同じくらい多くの値を取得します。
だから問題は何ですか?ブロッキング UDP 関数 receive() が問題ですか?
ありがとう!
編集
さまざまなデバイスでコードをテストしました: UDP は Samsung Galaxy Tab (Android 3.1) でうまく動作し、すべてのデータを受信しますが、他のデバイス (Android 4.0) ではデータの 1/3 しか受信しません。
ハードウェアの問題のようです...