我要实现2台客户机与2台服务器实行通信,具体是这样的:客户机(机房)2台:IP地址分别为192.168.1.10 /192.168.1.11
服务器端(调度室)2台:IP地址分别为192.168.1.15 /192.168.1.16现在想在任一客户机上发送一个消息给2台服务器,让它们同时响应,然后服务器端程序弹出一个提示窗口;我现在试过3台客户机向其中一台服务器发送消息时可以响应(而且服务器端不设客户机的IP居然也能收到,不懂原因),但2台同时就不行了,是不是在客户端要再加一个winsock控件?具体要怎样做请给出代码,谢谢!

解决方案 »

  1.   

    你可以把.RemoteHost = 255.255.255.255发送广播信息,这样每个机器都能收到了
      

  2.   

    刚才又试了一下,服务器/客户机不设对方IP地址时居然也能收到消息,是不是和端口设置有关系,还是和senddate/getdate的数据有关?发送和接收我设的都是---"有新的报修单请查收"
      

  3.   

    UDP主要是端口,不知道你是怎么写的
      

  4.   

    clientsck.LocalPort = 2001
     clientsck.RemoteHost = serverIp '服务端IP:变量serverIP赋值
     clientsck.RemotePort = 2000   '表示服务端端口
     clientsck.Bind 2001  '绑定到本地端口 clientsck.senddate "有新的报修单请查收"
     serversck.LocalPort = 2000
     clientsck.RemoteHost = clientIp '客户机IP:变量clientIP赋值
     clientsck.RemotePort = 2001   '表示客户机端口
     clientsck.Bind 2000  '绑定到本地端口Private Sub serversck_DataArrival(ByVal bytesTotal As Long)serversck.getdate "有新的报修单请查收"
    beep报修单.show  '显示报修单窗口End Sub其它的就没写了,大家再帮忙看看
      

  5.   

    最好用SendTo 和 RecvFrom来实现无阻塞。
      

  6.   

    sendto和recvfrom是什么东东,有代码事例么
      

  7.   

    SendTo 和 RecvFrom是windows API
    根据你的系统不同,调用的DLL不同(wsock32.dll或者ws2_32.dll)Declare Function recv Lib "ws2_32.dll" (ByVal s As Long, buffer As Any, ByVal length As Long, ByVal flags As Long) As Long 
    Declare Function send Lib "ws2_32.dll" (ByVal s As Long, buffer As Any, ByVal length As Long, ByVal flags As Long) As Long
      

  8.   

    UDP是服务器监听本机的某个端口,如果这个端口有数据过来就会响应,不需要设置对方的IP也能收到对方的数据,发送方向接收方的IP和Port发送数据就可以了。不管几个客户端连接服务器,服务器只需要一个winsock就可以了
      

  9.   

    据说作了很多年的网络编程的经验     建议你  接受和发送 分别使用一个winsock  基本上就不会出任何问题
      

  10.   

    客户端: 
    clientsck.LocalPort  =  2001  
     clientsck.RemoteHost  =  serverIp  '服务端IP:变量serverIP赋值  
     clientsck.RemotePort  =  2000      '表示服务端端口  
     clientsck.Bind  2001    '绑定到本地端口  
     
     clientsck.senddate    "有新的报修单请查收  "  
     
    服务端:(上面把serversck写成clientsck了)  serversck.LocalPort  =  2000  
     serversck.RemoteHost  =  clientIp  '客户机IP:变量clientIP赋值  
     serversck.RemotePort  =  2001      '表示客户机端口  
     serversck.Bind  2000    '绑定到本地端口  
     
    Private  Sub  serversck_DataArrival(ByVal  bytesTotal  As  Long)  
     
    serversck.getdate    "有新的报修单请查收  "  
    beep  
     
    报修单.show    '显示报修单窗口  
     
    End  Sub  
     
    现在当多个客户端用时服务端就会一直弹出消息,单独一个客户端发一个服务端时则没问题
      

  11.   

    我用的是
    Private Sub cmdConnect_Click()
    On Error GoTo ErrHandlerWith Winsock1
       If .LocalPort = Empty Then
          .LocalPort = Trim(txtLocalPort)
          .Bind .LocalPort
       End If
    End WithFrame1.Enabled = True
    Frame2.Enabled = True
    cmdConnect.Caption = "连接成功"
    cmdConnect.Enabled = FalseExit SubErrHandler:
    MsgBox "连接失败", vbCritical
    End Sub