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

请我真的2需要沟通他们..

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 回答