android tcp/ip 套接字不会向计算机发送数据 [英] android tcp/ip socket won't send data to computer

查看:29
本文介绍了android tcp/ip 套接字不会向计算机发送数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图制作一个将数据从android发送到计算机(java到vb.net)的应用程序.数据发送在 eclipse java 项目中有效,但在 android 项目中无效.但我有一个问题.在我的计算机中没有向visual basic 传入数据.VB代码:

i tried to make an application that send data from android to computer (java to vb.net). The data sending is working in eclipse java project, but not in android project . But i have a problem. no incoming data to visual basic in my computer. VB Code :

 Imports System.Net.Sockets
 Imports System.Threading
 Imports System.IO

Public Class Form1

Dim Listener As New TcpListener(65535)
Dim Client As New TcpClient
Dim Message As String = ""

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim ListThread As New Thread(New ThreadStart(AddressOf Listening))
    ListThread.Start()
End Sub

Private Sub Listening()
    Listener.Start()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Client = New TcpClient("192.168.100.3", 65535)

    Dim Writer As New StreamWriter(Client.GetStream())
    Writer.Write(TextBox2.Text)
    Writer.Flush()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If Listener.Pending = True Then
        Message = ""
        Client = Listener.AcceptTcpClient()

        Dim Reader As New StreamReader(Client.GetStream())
        While Reader.Peek > -1
            Message = Message + Convert.ToChar(Reader.Read()).ToString
        End While

        MsgBox(Message, MsgBoxStyle.OkOnly)
    End If
 End Sub

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As     System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    Listener.Stop()
End Sub

End Class

Java 代码:

package com.example.androidclient2;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
TextView serverMessage;
Thread m_objThreadClient;
Socket clientSocket;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    serverMessage=(TextView)findViewById(R.id.textView1);
}
public void Start(View view)
{
m_objThreadClient=new Thread(new Runnable() {
      public void run()
       {
          try 
           {
             clientSocket= new Socket("192.168.100.3",65535);
             ObjectOutputStream oos = new ObjectOutputStream(clientSocket.getOutputStream());
             oos.writeObject("Hellow there");
             Message serverMessage= Message.obtain();
             ObjectInputStream ois =new     ObjectInputStream(clientSocket.getInputStream());
             String strMessage = (String)ois.readObject();
            serverMessage.obj=strMessage;
            mHandler.sendMessage(serverMessage); 
            oos.close();
            ois.close();
           } 
           catch (Exception e) 
           {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

         }
        });

 m_objThreadClient.start();

}
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
    messageDisplay(msg.obj.toString());
}
};
public void messageDisplay(String servermessage)
{
serverMessage.setText(""+servermessage);
}

}

感谢您的帮助.

推荐答案

今天刚刚在 android 上创建并测试了这个类:

Have just created and tested this class on android today:

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;

public class TcpClient {

private static final String TAG = TcpClient.class.getSimpleName();

private Socket socket;
private PrintWriter out;
private boolean connected;

public TcpClient()
{
    socket = null;
    out = null;
    connected = false;
}


public void connect(Context context, String host, int port)
{
    new ConnectTask(context).execute(host, String.valueOf(port));
}

private class ConnectTask extends AsyncTask<String, Void, Void> {

    private Context context;

    public ConnectTask(Context context) {
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
        showToast(context, "Connecting..");
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Void result) {
        if (connected) {
            showToast(context, "Connection successfull");
        }           
        super.onPostExecute(result);
    }

    private String host;
    private int port;

    @Override
    protected Void doInBackground(String... params) {
        try {
            String host = params[0];
            int port = Integer.parseInt(params[1]);
            socket = new Socket(host, port);
            out = new PrintWriter(socket.getOutputStream(), true);
        } catch (UnknownHostException e) {
            showToast(context, "Don't know about host: " + host + ":" + port);
            Log.e(TAG, e.getMessage());
        } catch (IOException e) {
            showToast(context, "Couldn't get I/O for the connection to: " + host + ":" + port);
            Log.e(TAG, e.getMessage());
        }
        connected = true;
        return null;
    }


}

public void disconnect(Context context)
{
    if ( connected )
    {
        try {
            out.close();
            socket.close();
            connected = false;
        } catch (IOException e) {
            showToast(context, "Couldn't get I/O for the connection");
            Log.e(TAG, e.getMessage());
        }            
    }
}


/**
 * Send command to a Pure Data audio engine. 
 */
public void send(String command)
{
    if ( connected ) out.println(command +";");   
}

private void showToast(final Context context, final String message) {
    new Handler(context.getMainLooper()).post(new Runnable() {

        @Override
        public void run() {
            Toast.makeText(context, message, Toast.LENGTH_LONG).show();
        }
    });
}
}

即使我在您的代码中没有发现明显错误,它也可能对您有所帮助.

It might help you even though I see no obvious error in your code.

设备是否与您的计算机在同一个 WiFi 网络中?例如,它不能通过 USB 工作.

Is the device on the same WiFi network as your computer? It won't work via USB for instance.

这篇关于android tcp/ip 套接字不会向计算机发送数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆