winsock控件,client段传递文件,server接收.怎样才能使server自动得到client传递的文件名称呢???想过几个办法~``不可行~`看了一个完整的例子,找不到具体哪儿是取得文件名的代码.如果benyfeifei(狒狒) 看到,请告诉我下,那个例子中,server端怎样得到client的文件名称???谢谢大家

解决方案 »

  1.   

    这样也可以,不过senddata发送时字节(例如字节放入一个变量为SByte),应该是接SByte & FileName对么?
    总不能每个拆过得包,都放这样得字节吧?那样性能会多少造成一点影响得.还是其他什么方式么?请指教
      

  2.   

    正如ZOU_SEAFARER(国际海员)所说,发送文件的时候要包含文件名。
    你完全可以自定义一个如下类型的TypeType FilePacket  FileName As String*255 '文件名称
      FileSize As Long       '文件大小
      PacketNumeber As Integer '数据包序号
      PacketData() As Byte     '包数据,注意由于Socket的限制,数组大小建议为4000
      PacketSize As Integer    'PacketData()的大小 
    End Type然后用Socket把这个结构体发送出去就行。
      

  3.   

    PacketData() As Byte     '包数据,注意由于Socket的限制,数组大小建议为4000
    ----------------------------------------------------------
    4000有点过大,总之整个FilePacket的大小不要超过4096就行。
      

  4.   

    怎么说呢~~我主要的顾虑就是,我想实现的程序是多客户端的.也许同时要有很多客户端连接服务器段,进行文件传送.
    我就是在考虑,在发送文件名,文件大小后,然后再发送文件数据,服务器段会不会执行错误的命令?也许会把另外一个客户端的文件内容写到别的文件里边.
    另外还有一个问题,如果将客户端的数据写成类型(type),那么客户端应该怎样拆呢??????
      

  5.   

    怎么说呢~~我主要的顾虑就是,我想实现的程序是多客户端的.也许同时要有很多客户端连接服务器段,进行文件传送.
    我就是在考虑,在发送文件名,文件大小后,然后再发送文件数据,服务器段会不会执行错误的命令?也许会把另外一个客户端的文件内容写到别的文件里边.
    --------------------------------------------------------
    不管你采用这样的文件传输机制,服务器端在接收文件时,你必须要有一个机制确保文件存储的唯一性。你可以采取FlashGet的那种方式,当需要接收一个文件并获得文件名称和大小后,先在本地建立一个大小相同但数据为空的文件,如果遇到重名的情况,就对文件进行相应的更改。这样确保每一个客户端连接都与唯一的一个文件相对应。另外还有一个问题,如果将客户端的数据写成类型(type),那么客户端应该怎样拆呢??????
    -----------------------------------------------
    你看看这个例子吧:
    VB6.0实现发送结构体:发送端程序public Type MyType
       lngTest as long
       intTest as integer
    end typePrivate Sub Command1_Click()
     
        dim t as MyType    Dim var() As Byte
        
        t.intTest = 0
        t.lngTest = 10000
        
        ReDim var(0 To Len(t) - 1) As Byte  
        
        CopyMemory ByVal VarPtr(var(0)), ByVal VarPtr(t), Len(t)
        
        Winsock2.SendData var    
        
    End Sub接收端程序Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
        
        Dim var As Variant
        Dim t As MyType
        
        Dim tt() As Byte
        
        ReDim tt(0 To bytesTotal - 1) As Byte
        
        Winsock1.GetData var
        
        tt = var
        
        CopyMemory ByVal VarPtr(t), ByVal VarPtr(tt(0)), bytesTotal
        
       debug.print t.lngTest    
    End Sub然后对两个Winscok控件设置BPOSThttp://community.csdn.net/Expert/rep粤?
    我的是用UDP协议测的,TCP没试