请问,如何用winsock传输一个二进制数组,是不是得用循环?
本人水平不高,接触VB时间不久,请各位高手解答的详细一点儿,最好有源代码。
谢谢

解决方案 »

  1.   

    winsock控件可以直接传送字节数组。如
    dim arr(100)  as bytewinsock1.senddata arr
      

  2.   

    多谢指教,我是这样写的,可是Serner端接收不到,也可能是我写错了,能帮我写一下接收端接收数据的代码吗?我传的是图像文件,在接收端应该怎么将其还原成图像文件并在控件上显示?
    谢谢
      

  3.   

    在Server端发送数据的代码是
    dim filenum_1 as integer
    dim pic_1() as byte
    filenum_1=freefile
    open "c:\1.jpg" for binary as #filenum_1
    get #filenum_1,pic_1()
    close #filenum_1
    winsock1.senddata pic_1()在Client端接收数据的代码是
    dim pic_1() as byte
    winsock1.getdata pic_1()
    请高手帮我看看那里出了问题
    后面如何将二进制数组中的数据还原成图片,并显示在控件中?
    谢谢
      

  4.   


    dim filenum_1 as integer
    dim pic_1() as byte
    redim pic_1(4000-1)
    filenum_1=freefile
    open "c:\1.jpg" for binary as #filenum_1
    get #filenum_1,,pic_1
    winsock1.senddata pic_1
    -------------------------------------------
    winsock1_dataarrival(ByVal bytesTotal As Long)
    dim pic_1() as bytewinsock1.GetData pic_1, vbArray + vbByte '接收类型为:字节数组
      

  5.   

    winsock1.senddata BinDataBinData 是byte数组
      不过提醒一下
       winsock1 每一个包最大是8k,你控制一下
      

  6.   

    谢谢你的解释,还有一点不会。
    请问,如何将winsock发送的包控制在8K之内?能否給个例子?
    谢谢
      

  7.   

    redim pic_1(4000-1)'知道这是什么意思么??
    get #filenum_1,,pic_1'知道pic_1是什么意思么??如果知道,就知道怎样做了.如果不知道,看下边的函数
    Private Function SplitFile() As Long           '拆包
    On Error Resume Next
    Dim GetCount As Long'计算出这次可发送的字节数
    public GetFileSize as long
    getfilesize=filelen(filepath & filename)'求出文件总大小
    If GetFileSize >= 4000 Then
    GetCount = 4000
    GetFileSize = GetFileSize - GetCount
    Else
    GetCount = GetFileSize
    GetFileSize = GetFileSize - GetCount
    End If
    SplitFile = GetCount'函数返回的是每次发送的数据大小End Function
      

  8.   

    我认为发送的数据大小最好在4000以内,不然如果是c/c++做的服务端很可能接收数据出错.如果都是用vb做,我试过,只要小于8000,就可以.
      

  9.   

    你发送的数据最好打包,包头说明文件名,包的数量,包的序号,包数据长度等。你的协议最好能使接收端应答包是否接收成功,以便对失败的包重发。接收端数据接收完毕后,按顺序将包中的数据写回二进制文件,命名成原来的扩展名。通过 LoadPicture 方法,就可以在 PictureBox 中显示文件图像。