【发布时间】:2013-01-01 09:35:36
【问题描述】:
我是 Android 编程新手,我编写了一个简单的服务器(VB.NET)/客户端(Java/Android)程序。来自 Android/Java 的文本已成功发送到 VB.Net,但在 Android/Java 中未收到来自 VB.Net 的响应(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();
}
}
});
}
}
【问题讨论】:
-
您的代码看起来走在了正确的轨道上......而且我过去曾成功使用过相同的设置,所以我知道这是可能的。在 C# 端编写后,您是否尝试过不关闭流/客户端/服务器只是为了看看会发生什么?也许连接在 Android 读取之前就关闭了?
-
@thomas88wp 谢谢,但我试过了,它不起作用
-
@thomas88wp 感谢 4 条提示,使用
Threading.Thread.Sleep(1000)解决了这个问题,在 Android 读取之前连接已关闭 -
我也有同样的问题。让线程进入睡眠状态对我不起作用。还有其他会导致这种行为的事情吗? @ThunderRoid
标签: java android vb.net sockets tcp