【问题标题】:tcp connection with machine via ethernet using vb.net使用 vb.net 通过以太网与机器进行 tcp 连接
【发布时间】: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 之间建立连接,并且机器接受该端口中的任何连接。好像我不需要它..

标签: vb.net sockets tcp-ip


【解决方案1】:
Imports System.Net
Imports System.Net.Sockets
Imports System.Text.UTF7Encoding
Public Class Form1
Dim open As TcpListener
Dim server As TcpListener
Dim client, host As TcpClient
Dim dati, hdat As NetworkStream
Dim ip As String = Nothing
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ip = TextBox1.Text
    client = New TcpClient
    client.Connect(ip, 2101)
    If client.Connected = True Then
        dati = client.GetStream
        MsgBox("Connected", MsgBoxStyle.Information)
        Button1.Enabled = False
        Timer1.Start()
    Else
        MsgBox("Error", MsgBoxStyle.Critical)

    End If
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If client.Available > 0 Then
        Dim t(client.Available - 1) As Byte
        dati.Read(t, 0, t.Length)
        Dim testo As String = UTF7.GetString(t)
        RichTextBox1.Text += vbCrLf & "server : " & testo & vbCrLf
    End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim t() As Byte = UTF7.GetBytes(TextBox2.Text & vbCrLf)
    dati.Write(t, 0, t.Length)
    RichTextBox1.Text += vbCrLf & TextBox2.Text & vbCrLf
End Sub
End Class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2010-10-17
    • 2012-04-27
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多