1

Android から PC (Visual Basic 2010) に文字列を送信したいのですが、これを試してみましたが、うまくいきません。誰か助けてください..

私は自分の Android コードを http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/から取得します。

そしてそのように見える:

package com.zelacroix.bukumenu;
import java.io.*;
import java.net.*;
import android.app.Activity;
import android.os.*;
import android.util.*;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;
public class TesKirim extends Activity {

        private EditText serverIp;

        private Button connectPhones;

        private String serverIpAddress = "192.168.1.2";

        private boolean connected = false;

        private Handler handler = new Handler();

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.teskirim);

            serverIp = (EditText) findViewById(R.id.server_ip);
            connectPhones = (Button) findViewById(R.id.connect_phones);

            connectPhones.setOnClickListener(new OnClickListener() {
            @Override
                public void onClick(View v) {
                    if (!connected) {
                        serverIpAddress = serverIp.getText().toString();
                        if (!serverIpAddress.equals("")) {
                            Thread cThread = new Thread(new ClientThread());
                            Toast.makeText(getApplicationContext(), 
                                               "masuk if",  
                                               10)
                                .show();
                            cThread.start();
                        }
                    }
                }
            });
        };

        public class ClientThread implements Runnable {
            public void run() {
                try {
                    InetAddress serverAddr = 
                        InetAddress.getByName(serverIpAddress);
                    Log.d("ClientActivity", "C: Connecting...");
                    Socket socket = new Socket(serverAddr , 10000);
                    connected = true;
                    while (connected) {
                        try {
                            Log.d("ClientActivity", "C: Sending command.");
                            PrintWriter out = 
                                new PrintWriter(
                                    new BufferedWriter(
                                        new OutputStreamWriter(
                                            socket.getOutputStream())), 
                                    true);

                                // where you issue the commands
                                out.println("Hey Server!");
                                Log.d("ClientActivity", "C: Sent.");
                        } catch (Exception e) {
                            Log.e("ClientActivity", "S: Error", e);
                        }
                    }
                    socket.close();
                    Log.d("ClientActivity", "C: Closed.");
                } catch (Exception e) {
                    Log.e("ClientActivity", "C: Error", e);
                    connected = false;
                }
            }
        };
};

私のVisual BasicはUDPメソッドを使用しています..そしてそのように見えます:

Imports System.Net.Sockets
Imports System.Net
Imports System.IO
Imports System.Text

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, 
                              ByVal e As System.EventArgs) Handles Button1.Click
        Try
            Dim udp_Client As New UdpClient(10000)

            Dim remoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)

            Dim receiveBytes As [Byte]() = udp_Client.Receive(remoteIpEndPoint)
            Dim returnData As String = Encoding.ASCII.GetString(receiveBytes)
            ListBox1.Items.Add(returnData.ToString)
            udp_Client.Close()
        Catch ex As Exception
            ListBox1.Items.Add(ex.ToString())
        End Try
    End Sub
End Class

私は本当に彼らに連絡する必要があります..

4

1 に答える 1

5

TCPとUDP通信を混在させているため、問題が発生していると思います。Visual Basic アプリは UDP 経由でデータを受信することを想定しており、Android アプリは TCP 経由で送信しています。コードから Android および VB プロジェクトを作成し、Android アプリから次の UDP 送信関数を呼び出すと、通信は正常に機能します。Android からの文字列は、VB アプリのリストボックスに正しく表示されます。次のように、Android アプリから UDP ソケットを使用してみてください。

private void udp_send(String serverIpAddress) throws IOException
        {
            String messageStr="Hello Android!";
            int server_port = 10000;
            DatagramSocket s = new DatagramSocket();
            InetAddress local = InetAddress.getByName(serverIpAddress);
            int msg_length=messageStr.length();
            byte[] message = messageStr.getBytes();
            DatagramPacket p = new DatagramPacket(message, msg_length,local,server_port);
            s.send(p);
        }

[このコードを android シミュレーターと同じマシンで実行されている VB アプリで試しました。異なるマシン間で試行しても上記のコードで問題が発生する場合は、ポート 10000 の udp トラフィックがファイアウォールによって停止されていないことを確認してください。必要に応じて、問題をよりよく理解できるように、Android アプリから詳細な例外ログを提供できます]

于 2012-07-08T19:47:12.223 に答える