首页 文章

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

提问于
浏览
-1

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

到目前为止,我已经创建了以下代码,我认为是错误的:在此代码中,我尝试在正常线程上发送数据,但在不同的线程上接收数据,以便程序不会被搁置 .

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

HTTP / 1.1 501未实现

任何帮助都感激不尽

TCPControl class(handles the connection, send and receive matters)

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 class(handles form load and other stuff)

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

    'HTTP / 1.1 501 Not Implemented'由服务器发送,不是由VB生成的 .

    我会假设您的代码工作正常,问题在于您在客户端连接后发送的命令 .

相关问题