【发布时间】:2016-02-19 17:14:20
【问题描述】:
我想使用 vb.net 制作一个简单的 formapp,将 ASCII 字符串发送到机器,该机器在每个命令后都会响应。即,如果我发送“AA”,它会响应“123”。
如果我检查与超级终端的连接,我已经可以打开连接,因为它说该端口已被使用。然而,当我发送命令时,我没有回复。
我有点调整了服务器/客户端与 tcp 聊天的模板代码:
Imports System.Net.Sockets
Imports System.Threading
Dim Listener As New TcpListener(65535)
Dim Client As New TcpClient
Dim Message As String = "
Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick
If Listener.Pending = True Then
Message = ""
Client = Listener.AcceptTcpClient()
Dim Reader As New StreamReader(Client.GetStream())
While Reader.Peek > -1
Message = Message + Convert.ToChar(Reader.Read()).ToString
End While
RichTextBox1.ForeColor = Color.Black
RichTextBox1.Text += Message + vbCrLf
End Sub
Private Sub btnSend_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSend.Click
If txtName.Text = "" Or cmbAddress.Text = "" Then
MessageBox.Show("All Fields must be Filled", _
"Error", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
Try
Client = New TcpClient(cmbAddress.Text, 65535)
Dim Writer As New StreamWriter(Client.GetStream())
Writer.Write(txtName.Text & " Says: " & txtmessage.Text)
Writer.Flush()
RichTextBox1.Text += (txtName.Text & " Says: " & txtmessage.Text) + vbCrLf
txtmessage.Text = ""
Catch ex As Exception
Console.WriteLine(ex)
Dim Errorresult As String = ex.Message
MessageBox.Show(Errorresult & vbCrLf & vbCrLf & _
"Please Review Client Address", _
"Error Sending Message", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End If
End Sub
有没有更好的方法来做到这一点?我读到了.net.sockets,但我无法摆脱这个。
手册并没有说明机器的运行方式。如果它是客户端,服务器,主机..有人可以帮我吗?谢谢你 !
【问题讨论】:
-
MSDN上有一个使用同步和异步套接字的完整解决方案。只需复制并粘贴该代码:msdn.microsoft.com/en-us/library/w89fhyex(v=vs.110).aspx
-
一旦我使用了一个简单的请求/响应协议(不需要同时接收和发送,并且可以在一个线程中处理)我应该使用哪一个?我想两者都可以正常工作(如果我设法让它们在 windowsform 中工作)
-
你可以使用我的开源库。 griffinframework.net/doc/networking
-
@jgauffin idk 怎么了,但我以前到过那里!问题是我不知道如何实现这一点。我必须建立一个服务器吗?因为我想在机器和 PC 之间建立连接,并且机器接受该端口中的任何连接。好像我不需要它..