1

私は単純なサーバー(VB.NET)/クライアント(Java/Android)プログラムを作成したAndroidプログラミングの初心者です。Android/Java からのテキストは VB.Net に正常に送信されますが、VB.Net からの応答は Android/Java で受信されません ( buffer.readLine()は nullを返し ます) 。

何か不足していますか?

これが私のコードです

VB.NET (サーバー)

Imports System.Net.Sockets
Imports System.Text

Public Class Form1

Dim server As New TcpListener(9999)
Dim client As New TcpClient
Dim stream As NetworkStream

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub Start_Click(sender As Object, e As EventArgs) Handles Start.Click
    Me.Text = "Waiting...."
    Dim str As String
    server.Start()
    client = server.AcceptTcpClient
    stream = client.GetStream()
    Dim r_byt(client.ReceiveBufferSize) As Byte
    stream.Read(r_byt, 0, client.ReceiveBufferSize)
    Str = Encoding.ASCII.GetString(r_byt)
    Label1.Text = str
End Sub

Private Sub Responce_Click(sender As Object, e As EventArgs) Handles Responce.Click
    Dim s_byt() As Byte = Encoding.ASCII.GetBytes("Got it" & vbCr)
    stream.Write(s_byt, 0, s_byt.Length)
    stream.Flush()
    stream.Close()
    client.Close()
    server.Stop()
End Sub

Android/Java(クライアント)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class Main extends Activity {

Button buttonSend, buttonReceive;
private static Socket socket = null;
PrintStream stream = null;
BufferedReader buffer = null;
String string = "a";

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

    buttonSend = (Button) findViewById(R.id.buttonSend);
    buttonSend.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            try {
                socket = new Socket("192.168.0.104", 9999);
                stream = new PrintStream(socket.getOutputStream());
                stream.println("Hi Server...");

                buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                string = buffer.readLine(); 
                Log.d("ServerActivity", " - " + string);
                buffer.close();
                socket.close();
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

    }
}
4

1 に答える 1

1

いくつか問題があるようです。

  • サーバー側では、ソケットからに何かを読み込もうとしr_bytており、クライアント側では何も書き込んでいません。サーバー側で送信ボタンを押してr_bytもnullのままであり、それがクライアント側で受信されます。

  • クライアント側では、ソケット読み取りへの呼び出しがブロックされており、数秒後にクライアントでANRエラー(アプリケーションが応答していません)が発生します。読み取ったソケットをUIから別のスレッドに移動する必要があります。新しいAndroidバージョンでは、UIスレッドのソケットから読み取ることさえできません。

よろしく。

于 2013-01-01T01:35:36.507 に答える