-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
服務器應該發回我發送的任何文本。但它發送給我的是 – james
您需要在連接時向服務器發送命令,您想要做什麼?如果你想要一個頁面,在客戶端連接後發送'GET/path'。否則什麼都不會發生,服務器只會暫停。 – Mike
好吧,我現在看到,它只是'回聲'你發送給它,對嗎?也許你必須在文本前發送'ECHO'或其他內容。沒有實現似乎表明你的語法錯了。 – Mike