2017-05-29 147 views
-1

我是網絡編程的新手,非常感謝您的幫助,以便將數據發送到服務器。我正嘗試使用套接字發送和接收來自使用WebSockets開發的服務器的數據。使用Vb.net中的套接字從websocket服務器發送和接收數據

直到現在我已經創建了下面的代碼,我認爲是錯誤的:在這段代碼中,我試圖在正常線程上發送數據,但是在不同線程上接收數據,因此程序不會保留。

,我將數據發送到服務器上,一段時間後,我得到的,其中我試圖收到服務器的響應文本框中這段文字回覆:

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 

回答

0

'HTTP/1.1 501未執行' 是由服務器,而不是由VB產生髮送。

我就從這個,你的代碼工作正常假設,問題出在客戶端連接後,您發送的指令(S)。

+0

服務器應該發回我發送的任何文本。但它發送給我的是 – james

+0

您需要在連接時向服務器發送命令,您想要做什麼?如果你想要一個頁面,在客戶端連接後發送'GET/path'。否則什麼都不會發生,服務器只會暫停。 – Mike

+0

好吧,我現在看到,它只是'回聲'你發送給它,對嗎?也許你必須在文本前發送'ECHO'或其他內容。沒有實現似乎表明你的語法錯了。 – Mike

相關問題