使用Vb.net中的套接字从websocket服务器发送和接收数据
问题描述:
我是网络编程的新手,非常感谢您的帮助,以便将数据发送到服务器。我正尝试使用套接字发送和接收来自使用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
答
'HTTP/1.1 501未执行' 是由服务器,而不是由VB产生发送。
我就从这个,你的代码工作正常假设,问题出在客户端连接后,您发送的指令(S)。
服务器应该发回我发送的任何文本。但它发送给我的是 – james
您需要在连接时向服务器发送命令,您想要做什么?如果你想要一个页面,在客户端连接后发送'GET/path'。否则什么都不会发生,服务器只会暂停。 – Mike
好吧,我现在看到,它只是'回声'你发送给它,对吗?也许你必须在文本前发送'ECHO'或其他内容。没有实现似乎表明你的语法错了。 – Mike