如何用VB实现服务器端接收客户端发送的数据报??

时间:2022-01-08 05:50:26
偶需要一个服务器端的程序以对客户端进行信息侦听 并接收客户端发送过来的数据报 然后根据数据报内容 回送一段发送过来的数据报中的一段内容 不知该怎么写 求教CSDN上的各位高人们……(当然是用VB的,最好能有源码,或者有参考的也成)

5 个解决方案

#1


单线程的还是多线程的,正好刚做了个多线程的简单的vb服务器,需要的话给我个信箱

#2


这里有一个用winsock的控件做的数据接收,可以给你参考
Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)
'   On Error Resume Next
    Dim BBB() As Byte
    Dim I, j As Integer
   '获取客户端数据
    I = Winsock1(index).BytesReceived
    ReDim BBB(I)
    Winsock1(index).GetData BBB, vbByte, I '将接收到的数据一起存放到BBB()中做处理
    
  For j = 0 To I - 1 '
   ’自己处理各个字节的数据
  Next j
  Winsock1(index).SendData "Ok"
End Sub

#3



服务器端程序:
添加一个winsock,命名为sckServer(0)
Private Sub Form_Load()
    sckServer(0).LocalPort = 6000'可自行设置,最好在1024以上
    sckServer.Listen
End Sub

Private Sub sckServer_ConnectionRequest(Index As Integer, ByVal requestID As Long) 
    Load sckServer(1)
    sckServer(1).Accept requestID '这时,服务器程序接受客户机连接请求,sckServer(1)与sckClient之间建立一个连接
                                       '在此基础上,两者之间可分别调用SendData方法发送数据
End Sub

Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)  
    Dim sData As String
    sckServer(Index).GetData sData
    '......处理接收的数据报
     sckServer(Index).SendData DataToSendBack '将发送过来的数据报中的一段内容(DataToSendBack )发回去
    MsgBox "接收客户机数据:" & sData '将接收的数据显示出来
End Sub


'==================================================
客户机程序:
添加一个winsock,命名为sckClient;客户机上加两个按钮cmdConnect和cmdSend

Private Sub cmdConnect_Click()  
    sckClient.RemotePort = 6000
    sckClient.RemoteIP = 192.168.1.6'加入服务器地址IP为192.168.1.6
    sckClient.Connect'此时客户机向服务器发送一个连接请求,在服务器端会触发sckServer_ConnectionRequest事件
End Sub

当服务器端调用sckServer(1).Accept requestID 后,客户机会触发以下事件
Private Sub sckClient_Connect()  
    MsgBox "已经连接到服务器!"
End Sub

这样客户机就可发送数据到服务器了,如:
Private Sub cmdSend_Click()  
    sckClient.SendData "你好!"
End Sub

Private Sub sckClient_DataArrival(ByVal bytesTotal As Long)  
    Dim sData As String
    sckClient.GetData sData
    '......数据报内容处理
    MsgBox "接收到服务器数据:" & sData '将接收的数据显示出来
End Sub

#4


感谢大家 

回2楼的 发sleven.lei@shijinet.com.cn

#5


感谢2楼的XD

我用的是单线程的 基本解决了

再次感谢大家一下 

就此结帖吧

#1


单线程的还是多线程的,正好刚做了个多线程的简单的vb服务器,需要的话给我个信箱

#2


这里有一个用winsock的控件做的数据接收,可以给你参考
Private Sub Winsock1_DataArrival(index As Integer, ByVal bytesTotal As Long)
'   On Error Resume Next
    Dim BBB() As Byte
    Dim I, j As Integer
   '获取客户端数据
    I = Winsock1(index).BytesReceived
    ReDim BBB(I)
    Winsock1(index).GetData BBB, vbByte, I '将接收到的数据一起存放到BBB()中做处理
    
  For j = 0 To I - 1 '
   ’自己处理各个字节的数据
  Next j
  Winsock1(index).SendData "Ok"
End Sub

#3



服务器端程序:
添加一个winsock,命名为sckServer(0)
Private Sub Form_Load()
    sckServer(0).LocalPort = 6000'可自行设置,最好在1024以上
    sckServer.Listen
End Sub

Private Sub sckServer_ConnectionRequest(Index As Integer, ByVal requestID As Long) 
    Load sckServer(1)
    sckServer(1).Accept requestID '这时,服务器程序接受客户机连接请求,sckServer(1)与sckClient之间建立一个连接
                                       '在此基础上,两者之间可分别调用SendData方法发送数据
End Sub

Private Sub sckServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)  
    Dim sData As String
    sckServer(Index).GetData sData
    '......处理接收的数据报
     sckServer(Index).SendData DataToSendBack '将发送过来的数据报中的一段内容(DataToSendBack )发回去
    MsgBox "接收客户机数据:" & sData '将接收的数据显示出来
End Sub


'==================================================
客户机程序:
添加一个winsock,命名为sckClient;客户机上加两个按钮cmdConnect和cmdSend

Private Sub cmdConnect_Click()  
    sckClient.RemotePort = 6000
    sckClient.RemoteIP = 192.168.1.6'加入服务器地址IP为192.168.1.6
    sckClient.Connect'此时客户机向服务器发送一个连接请求,在服务器端会触发sckServer_ConnectionRequest事件
End Sub

当服务器端调用sckServer(1).Accept requestID 后,客户机会触发以下事件
Private Sub sckClient_Connect()  
    MsgBox "已经连接到服务器!"
End Sub

这样客户机就可发送数据到服务器了,如:
Private Sub cmdSend_Click()  
    sckClient.SendData "你好!"
End Sub

Private Sub sckClient_DataArrival(ByVal bytesTotal As Long)  
    Dim sData As String
    sckClient.GetData sData
    '......数据报内容处理
    MsgBox "接收到服务器数据:" & sData '将接收的数据显示出来
End Sub

#4


感谢大家 

回2楼的 发sleven.lei@shijinet.com.cn

#5


感谢2楼的XD

我用的是单线程的 基本解决了

再次感谢大家一下 

就此结帖吧