java - VB.Net 套接字与 Android Socket 通信
问题描述
我正在尝试使用套接字在 android 应用程序和 VB.net 应用程序之间进行通信。VB 应用程序可以连接到套接字,但我面临的问题是 VB.net 应用程序仅在我调用 stream.Dispose 时将数据发送到连接的 android 套接字。
以下是我的 Android 和 VB.net 代码
安卓:
class Thread1 implements Runnable {
@Override
public void run() {
Socket socket;
try {
serverSocket = new ServerSocket(SERVER_PORT);
try {
socket = serverSocket.accept();
input = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
runOnUiThread(new Runnable() {
@Override
public void run() {
txtviewIP.setText("Connected");
}
});
new Thread(new Thread2()).start();
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private class Thread2 implements Runnable {
boolean bKeepRunning = true;
@Override
public void run() {
while (bKeepRunning) {
try {
final String message = input.readLine();
if (message != null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("Message", "Command Received: " + message);
if (message.equalsIgnoreCase("A")) {
DoSomething();
bKeepRunning = false;
}
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
try {
serverSocket.close();
Thread1 = new Thread(new Thread1());
Thread1.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
VB.Net:
Dim clientSocket As New System.Net.Sockets.TcpClient()
Dim ipAddress As String
Dim port As String = "9877"
Dim serverStream As NetworkStream
Dim bConnected As Boolean = False
Public Function Connect() As Boolean
Try
clientSocket.Connect(ipAddress, port)
serverStream = clientSocket.GetStream()
bConnected = True
Catch ex As Exception
bConnected = False
Finally
End Try
Connect = bConnected
End Function
Public Sub SendToServer(text As String)
'Dim serverStream As NetworkStream = clientSocket.GetStream()
Dim outStream As Byte() = System.Text.Encoding.UTF8.GetBytes(text)
serverStream.Write(outStream, 0, outStream.Length)
serverStream.Flush()
'till this point no data is sent.
'as soon as I call dispose or close data is sent
serverStream.Close() OR serverStream.Dispose()
'Have also tried below code but this also do not work and behaves in the same way as above
Dim stream As StreamWriter = New StreamWriter(serverStream, System.Text.Encoding.UTF8)
stream.AutoFlush = True
stream.Write(text)
stream.Flush()
'Data is sent as soon as the below line is executed
Stream.Close()
End Sub
解决方案
推荐阅读
- ios - 滚动时如何在集合视图补充标题视图中做可折叠标题?
- c# - 如何合并两个单独的 Web 层 ASP.NET Core MVC?
- html - CSS如何防止带有用户选择的按钮:无在移动设备上选择外部文本?
- android - Android Wear 未通过意图打开拨号盘
- swift - SwiftUI 为什么“返回”会导致“无法推断复杂的闭包返回类型;添加显式类型以消除歧义”
- macos - MAMP 调用我的 MAC 上未定义的函数 odbc_connect()
- python - Kivy AttributeError: 'super' object has no attribute '__getattr__' (尝试了所有以前的解决方案)
- java - Java .parallelStream() 内部带有随机参数
- java - 如何以最有效的方式迭代列表并为其设置数据?
- react-router-dom - 在路径中使用用户名来路由组件(React-router-dom)