2017-05-29 146 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

相关问题