traté de hacer una aplicación que envía los datos de android a la computadora (java vb.net). La transmisión de datos está trabajando en eclipse proyecto de java, pero no en el proyecto android .
Pero tengo un problema. no hay entrantes de datos de visual basic en mi equipo.
El Código VB :

 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

código 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);
}
}

Y Gracias Por La ayuda .

  • es tu dispositivo android y tu ordenador en la misma red local(que es 192.168.100.x)? También, por favor no use el puerto 65535
  • sí , lo es . y por qué no el puerto 65535 ? cuál elegir ?
  • Simplemente porque es el último número de puerto, hay probablemente una mejor oportunidad de un conflicto en el puerto. A recoger algo en el puerto privado de la gama de 49152 a 65535 es bueno, me acaba de quedar claro de la primera y la última de 10 en estos rangos. Recoger algo arbitraria en algún lugar en el medio
  • También se podría utilizar el registrado rangos de puertos, y elegir algo que no está asignada. stackoverflow.com/questions/133879/…
  • aha … me tienes , yo a pesar de que es mejor ser el último número . pero ¿cuál es el problema aquí ? gracias .
InformationsquelleAutor fares | 2013-11-21

1 Comentario

  1. 6

    Ha creado y probado esta clase en android hoy:

    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();
    }
    });
    }
    }

    Podría ayudar, incluso aunque veo ningún error obvio en su código.

    Es el dispositivo en la misma red WiFi que tu ordenador? No funciona a través de USB, por ejemplo.

    • Este Código tiene errores :/
    • pero de todos modos gracias.
    • No tiene errores. Está usted seguro de que se han importado los paquetes correctos? Voy a añadir el de las importaciones para el código.
    • Bien, esto funciona. Pero, ¿por qué el envío de dos veces? Tengo una aplicación en C# se ejecuta para comprobar el número de conexión de la aplicación, y cada vez que la carga de la actividad, se dice que «Una nueva aplicación conectada» y diciendo dos veces.
    • Como @tarifas dijo que hubo error, eso es cierto, si usted no está conectado al host remoto, sólo porque algunas de excepción, usted está demostrando que estoy conectado? Cambia el estado de la conexión basado en un error o éxito.

Dejar respuesta

Please enter your comment!
Please enter your name here