现在要做一个程序,装在自己的机器上,也装在远程的一个计算机上,只要知道对方的ip地址,就可以对它进行操作。主要是测试串口通信。这个应该怎么实现?用什么控件?谢谢

解决方案 »

  1.   

    楼主的问题,我的理解是要作类似PCAnywhere之类的远程控制,不知道我的理解是否正确。
    使用Winsock控件,使用TCP协议或UDP协议(适合局域网)均可。
    使用前者的话需要写一个服务器程序和一个客户段程序,客户段程序负责向服务器段发送命令(命令协议可以自己定义)服务器段接收到命令后按照命令去执行一个操作(比如按下某一个按钮,或者直接执行一个过程等等)。
    使用后者的话不需要写服务器端或客户段,两者只是IP地址的差异而已。也是向需要控制的那台机器发送命令。
    当执行完毕后需要将执行的结果返回给控制的那台机器,可以以文件格式返回结果,也可以直接以数字或字符方式返回结果。返回图片文件的话需要有足够的带宽,因为VB默认是BMP格式,算1秒钟2帧的话,在1024*768的分辨率下也有5M多的数据。
    因为这里牵涉的东西实在不少,无法给出更详细的说明,只能给到楼主一个思路,希望有所帮助。
      

  2.   

    WallesCai 说的很对,就是那个意思
    用TCP做
    那应该参考哪写资料?
    winsock控件怎么填加?
      

  3.   

    http://applevb.com/sourcecode/snet.htm
      

  4.   

    用tcp:
    服务器端代码:
    Option Explicit
    Private Sub CloseCmd_Click()
        SockCtrl(0).Close
    End SubPrivate Sub Form_Load()
        SockCtrl(0).Protocol = sckTCPProtocol
        HostNameLbl = SockCtrl(0).LocalHostName
        SockCtrl(0).LocalPort = 6800
        PortTxt = SockCtrl(0).LocalPort
        Me.Caption = "服务器" & " - " & SockCtrl(0).LocalIP
    End SubPrivate Sub ListenCmd_Click()
    '    SockCtrl.Bind CInt(PortTxt), SockCtrl.LocalIP
        SockCtrl(0).LocalPort = CInt(PortTxt)
        SockCtrl(0).Listen
    End Sub
    Private Sub PortTxt_Change()
        Dim i As Integer, ch As Byte
        For i = 1 To Len(PortTxt)
            ch = Asc(Mid(PortTxt, i, 1))
            If ((ch < 48) Or (ch > 57)) Then
                MsgBox "请输入0-9之间的数字", vbCritical, "输入错误"
                SendKeys "{BS}"
                Exit Sub
            End If
        Next i
    End Sub
    Private Sub PortTxt_GotFocus()
        PortTxt.SelStart = 0
        PortTxt.SelLength = Len(PortTxt)
    End Sub
    Private Sub PortTxt_KeyPress(KeyAscii As Integer)
        If (KeyAscii = vbKeyReturn) Then
            If (Val(PortTxt) > 65535) Then
                MsgBox "请输入0-65535之间的值", vbCritical, "数值太大"
                Exit Sub
            End If
            Call ListenCmd_Click
        End If
    End Sub
    Private Sub SockCtrl_ConnectionRequest(Index As Integer, ByVal requestID As Long)
        Static Cnt As Boolean
        If (Not Cnt) Then
            Load SockCtrl(1)
            SockCtrl(1).Accept (requestID)
            Cnt = True
        End If
    End SubPrivate Sub SockCtrl_DataArrival(Index As Integer, ByVal bytesTotal As Long)
        Dim data As String, ip As String
        data = Space(bytesTotal + 2)
        SockCtrl(Index).GetData data, vbString, bytesTotal
        Dim i As Integer, ch As Byte, msg As String
        For i = 1 To Len(data)
            ch = Asc(Mid(data, i, 1))
            If ((ch = 13) Or (ch = 10)) Then
                If (i < Len(data) - 1) Then
                    msg = msg & vbCrLf
                End If
            Else
                msg = msg & Chr(ch)
            End If
        Next i
        ip = SockCtrl(Index).RemoteHostIP & ": " & data
        ListMsg.AddItem ip
    End SubPrivate Sub SockCtrl_Error(Index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
        MsgBox Description, vbCritical, "错误"
        SockCtrl(Index).Close
    End Sub客户端代码
    Option Explicit
    Private Sub ConnectCmd_Click()
        If (SockCtrl.State = sckConnected) Then
            Exit Sub
        End If
        SockCtrl.LocalPort = 0
        SockCtrl.RemoteHost = HostTxt
        SockCtrl.RemotePort = CInt(Porttxt)
        SockCtrl.Connect
    End SubPrivate Sub DisconnectCmd_Click()
        If (SockCtrl.State = sckClosed) Then
            Exit Sub
        End If
        SockCtrl.Close
    End Sub
    Private Sub Form_Load()
        SockCtrl.Protocol = sckTCPProtocol
    End Sub
    Private Sub HostTxt_GotFocus()
        HostTxt.SelStart = 0
        HostTxt.SelLength = Len(HostTxt)
    End Sub
    Private Sub HostTxt_KeyPress(KeyAscii As Integer)
        If ((KeyAscii = vbKeyReturn) And (Len(LTrim(HostTxt)) > 0)) Then
            SendKeys "{TAB}"
        End If
    End Sub
    Private Sub HostTxt_LostFocus()
        If Len(LTrim(HostTxt)) = 0 Then
            HostTxt.SetFocus
        End If
    End Sub
    Private Sub MsgTxt_GotFocus()
        MsgTxt.SelStart = 0
        MsgTxt.SelLength = Len(MsgTxt)
    End SubPrivate Sub Porttxt_Change()
        Dim i As Integer, ch As Byte
        For i = 1 To Len(Porttxt)
            ch = Asc(Mid(Porttxt, i, 1))
            If ((ch < 48) Or (ch > 57)) Then
                MsgBox "请输入0-9之间的数字", vbCritical, "输入错误"
                SendKeys "{BS}"
                Exit Sub
            End If
        Next i
    End Sub
    Private Sub Porttxt_KeyPress(KeyAscii As Integer)
        If (KeyAscii = vbKeyReturn) Then
            If (Val(Porttxt) > 65535) Then
                MsgBox "请输入0-65535之间的值", vbCritical, "数值太大"
                Exit Sub
            End If
            Call ConnectCmd_Click
        End If
    End Sub
    Private Sub SendCmd_Click()
        If (SockCtrl.State = sckConnected) Then
            SockCtrl.SendData MsgTxt
        End If
    End SubPrivate Sub SockCtrl_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
        MsgBox Description, vbCritical, "错误"
        SockCtrl.Close
    End Sub
      

  5.   

    ezlj(我啊)  感谢这么好的例子
       如果要求不是服务器端和客户端
    而是两个单机之间测试通讯
    需要改动哪些