gpt4 book ai didi

java - VB.Net 服务器和 Android 客户端(套接字)发送和接收

转载 作者:可可西里 更新时间:2023-11-01 02:52:34 24 4
gpt4 key购买 nike

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

}
}

最佳答案

看起来您有几个问题:

  • 在服务器端,你试图从套接字中读取一些东西到 r_byt,并且您没有在客户端向它写入任何内容。当您在服务器端按下发送按钮时,r_byt 仍然为空并且这就是您在客户端收到的信息。

  • 在客户端,对 socket read 的调用是阻塞的,并且在一些秒将导致 ANR 错误(应用程序未响应)客户。您应该将套接字读取移动到不同的线程从用户界面。较新的 Android 版本甚至不允许您阅读UI 线程中的套接字。

问候。

关于java - VB.Net 服务器和 Android 客户端(套接字)发送和接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com