3

サーバーにメッセージを ping して、サーバー上の合計プレーヤーの数値を含むメッセージを取得しようとしています。残念ながら、以下のコードの一部を削除しない限り、以下のコードはフリーズします。

Public Shared Function SocketSendReceive(server As String, port As Integer) As String
    'Set up variables and String to write to the server. 
    Dim ascii As Encoding = Encoding.ASCII
    Dim request As String = (DoubleChar(Len(Chr(35))) + Chr(CheckSum(Chr(35)) * 20 Mod 194) + Chr(0) + Chr(35))
    Dim bytesSent As [Byte]() = ascii.GetBytes(request)
    Dim bytesReceived(255) As [Byte]

    ' Create a socket connection with the specified server and port. 
    Dim s As Socket = ConnectSocket(server, port)

    If s Is Nothing Then
        Return "0"
    End If
    ' Send request to the server.
    s.Send(bytesSent, bytesSent.Length, 0)

    ' Receive the server  home page content. 
    Dim bytes As Int32

    ' Read the first 256 bytes. 
    Dim page As [String] = "0"

    ' The following will block until the page is transmitted. 
    Do
        bytes = s.Receive(bytesReceived, bytesReceived.Length, 0)
        page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes)
    Loop While bytes > 0
    Return page
End Function

コードのこの部分を削除すると:

    Do
        bytes = s.Receive(bytesReceived, bytesReceived.Length, 0)
        page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes)
    Loop While bytes > 0

ping は通過しますが、値が返されません。誰かが私が間違っていることを指摘できますか?

4

1 に答える 1

1

あなたのループはそれをクラッシュさせています。同様の問題がありました。あなたがしなければならないことは、サーバーをマルチスレッドにすることです。ここで行うことは、コードを無限にループすることであり、現在のスレッドがフリーズします。別のスレッドを追加すると、機能します。Google (マルチスレッド ソケット プログラミング)

于 2013-11-25T16:56:19.697 に答える