使用Vb.net中的套接字从websocket服务器发送和接收数据

时间:2017-05-29 08:32:48

标签: vb.net multithreading sockets websocket

我是网络编程新手,非常感谢您帮助接收和发送数据到服务器。我正在尝试使用套接字从使用WebSockets开发的服务器发送和接收数据。

到目前为止,我已经创建了以下代码,我认为是错误的:在这段代码中,我试图在普通线程上发送数据,但是在不同的线程上接收数据,这样程序就不会被搁置。

当我向服务器发送数据时,一段时间后我在文本框中收到此文本回复,我试图接收服务器响应:

  

HTTP / 1.1 501未实现

非常感谢任何帮助

TCPControl类(处理连接,发送和接收事务)

Public Class TCPControl

Public client As TcpClient
Public DataStream As StreamWriter

Private ReceiveData As StreamReader

Private comThread As Thread
Public isListening As Boolean = True

Public Event MessageReceived(sender As TCPControl, Data As String)

Public Sub New(Host As String, Port As Integer)

    Try
        client = New TcpClient(Host, Port)
        DataStream = New StreamWriter(client.GetStream)

        comThread = New Thread(New ThreadStart(AddressOf Listening))
        comThread.Start()



    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub


Private Sub Listening()

    Do Until isListening = False

        If client.Connected = True Then
            ReceiveData = New StreamReader(client.GetStream)
        End If

        Try
            RaiseEvent MessageReceived(Me, ReceiveData.ReadLine)
        Catch ex As Exception

        End Try


        Thread.Sleep(10)
    Loop

End Sub

Public Sub Send(Data As String)
    DataStream.Write(Data & vbCrLf)
    DataStream.Flush()
End Sub End Class

Form1类(处理表单加载和其他内容)

Public Class Form1

Private client As TCPControl
' Private receiveClient As TCPControlReceive

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    ' client = New TCPControl("174.129.224.73", 80)
    client = New TCPControl(GetIpAddress("echo.websocket.org").ToString, 80)
    If client.client.Connected Then Label1.Text = "Connected"

    'receiveClient = New TCPControlReceive
    AddHandler client.MessageReceived, AddressOf OnLineReceived

End Sub

Private Delegate Sub UpdateMessageDelegate(TB As TextBox, txt As String)

Private Sub UpdateText(TB As TextBox, txt As String)
    If TB.InvokeRequired Then
        TB.Invoke(New UpdateMessageDelegate(AddressOf UpdateText), New Object() {TB, txt})
    Else
        If txt IsNot Nothing Then
            TB.AppendText(txt & vbCrLf)
        End If
    End If
End Sub

Private Sub OnLineReceived(sender As TCPControl, Data As String)

    UpdateText(txtReceive, Data)

End Sub

Private Function GetIpAddress(address As String) As IPAddress

    Dim ips As IPAddress()
    ips = Dns.GetHostAddresses(address)
    Return ips(0)
End Function

Private Sub SendMessage()
    If client.client.Connected = True Then
        client.Send(txtSend.Text)
    End If
End Sub

Private Sub Form1_ContextMenuStripChanged(sender As Object, e As EventArgs) Handles Me.ContextMenuStripChanged
    If client.client.Connected = True Then
        client.DataStream.Close()
        client.Client.Close()
    End If
    client.isListening = False

End Sub

Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
    SendMessage()
    txtSend.Clear()
End Sub      End Class

1 个答案:

答案 0 :(得分:0)

' HTTP / 1.1 501未实施'由服务器发送,而不是由VB生成。

我认为你的代码工作正常,问题在于客户端连接后发送的命令。