Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基本Android服务器套接字_Android_Vb.net_Networking_Serversocket_Basic4android - Fatal编程技术网

基本Android服务器套接字

基本Android服务器套接字,android,vb.net,networking,serversocket,basic4android,Android,Vb.net,Networking,Serversocket,Basic4android,我正在尝试在运行.NET客户端服务器的PC和Android设备之间进行双向通信(代码是用Basic4Android编写的)。 从安卓系统发送到个人电脑工作正常,当我尝试从个人电脑发送到安卓系统时,问题就出现了。 我正在尝试使用ServerSocket,但当电脑尝试连接到Android设备时,超时并引发异常。我使用的代码如下所示: PC.NET Dim sock As New Socket(AddressFamily.InterNetwork, SocketType.Stream, Protoc

我正在尝试在运行.NET客户端服务器的PC和Android设备之间进行双向通信(代码是用Basic4Android编写的)。 从安卓系统发送到个人电脑工作正常,当我尝试从个人电脑发送到安卓系统时,问题就出现了。 我正在尝试使用ServerSocket,但当电脑尝试连接到Android设备时,超时并引发异常。我使用的代码如下所示:

PC.NET

 Dim sock As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
 sock.Connect(remoteip, 8565)
 Dim buffer() As Byte = UTF8.GetBytes(string)
 sock.Send(buffer)
 sock.Close()
Android代码:

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim ss As ServerSocket 
    Dim IS1 As InputStream 
    Dim timerListener As Timer
End Sub


Sub Activity_Create(FirstTime As Boolean)
    timerListener.Initialize(timerListener, 1)
    ss.Initialize(8565, "ss")
    ss.Listen
End Sub

Sub ss_NewConnection (Successful As Boolean, NewSocket As Socket)
    If Successful Then
    IS1 = NewSocket.InputStream     
    timerListener.Enabled = True
    Else
    ToastMessageShow("Error.", True)
    End If
End Sub

Sub timerListener_Tick
    Dim cv As ByteConverter 
If IS1.BytesAvailable > 0 Then
    Dim buffer() As Byte
    IS1.ReadBytes(buffer, 0, IS1.BytesAvailable)
    Dim result As String = cv.StringFromBytes(buffer, "UTF8")
    ToastMessageShow(result, True)
    timerListener.Enabled = False
End If
End Sub
问题是什么?
提前谢谢你

您应该使用AsyncStreams来读取数据

在您的PC中,在写入消息后从流中读取一个字节。这将导致线程等待字节可用,而不是在设备读取消息之前关闭套接字。

在Sub-timerListener_Tick()中,控制计时器操作:

timerListener.Enabled = False
...
timerListener.Enabled = True

计时器将周期性地接收消息。

在发送后直接关闭PC套接字将导致发送错误,因为它在您实际上仍在发送时关闭,最好使用全局变量保存套接字实例,但如果您希望发送同步(等待传输提交),请使用MSDN中的示例

不过我个人不推荐,我更喜欢使用异步传输,就像上面的一篇文章推荐的那样。 见->