50分急求!! TCP下在同一次事件触发中不能发生两次winsock.senddata事件~~~~~UDP可以!~Private Sub Command1_Click()
Winsock1.SendData "aaaaa"
Winsock1.SendData aryContent  'aryContent为二进制数组,存储图片,小于8K!
End Sub
aryContent不能传过来!~~!或者传输不全!~
UDP下可以!~望各位朋友帮帮忙忙~~谢谢~~~谢谢~~~

解决方案 »

  1.   

    Winsock1.SendData "aaaaa"Winsock1.SendData aryContent  'aryContent为二进制数组,存储图片,小于8K!
    如果我把上两句写在两件事件里面到是可以传输~~
    P:上面说的  (aryContent不能传过来!~~!或者传输不全!~
    UDP下可以!~)  有点不对!~可以传输完全~只是就是打不开!~~~
      

  2.   

    看MSDN中的:sendcomplete事件的解释!
      

  3.   

    Winsock1.SendData "aaaaa"
    doevents
    Winsock1.SendData aryContent  'aryContent为二进制数组,存储图片,小于8K!
      

  4.   

    谢谢~~可以传输拉~~
    但现在我用语句
    Image1.Picture = LoadPicture("out.jpg")
    打开传输过来的图片却说"对象错误"
      

  5.   

    影子兄~~
    谢谢拉~~(又是我,没分拉,换了个号~呵呵)
    我把程序改为了你说的
    Winsock1.SendData "aaaaa"
    doevents
    Winsock1.SendData aryContent  'aryContent为二进制数组,存储图片,小于8K!
    图片可以传到拉~用看图工具也可以打开拉~
    但是我用
    Image1.Picture = LoadPicture("out.jpg") '图片传输前我已经转为jpg了~
    语句打开时,确出错了~  --"对象错误" 或者"图片无效"我的接收语句为:
    if falg=0 then             'falg 为一个标志~用于判断接字符,还是二进制数组
    Winsock1.GetData data, vbString   'falg=0 接字符
    falg=1                      '将falg=1 ,准备为接二进制数组
    else
    if falg=1 then               'falg=1 ,接二进制数组
    Winsock1.GetData temp, vbByte
    Open "out.jpg" For Binary As #f
    Put #f, , temp
    Close #f
    tfalg = 0
    end if
    END if是不是我的接收语句出错了~~但在UDP下可以用~~
    请麻烦帮我解决一下~~急人啊~~
    谢谢拉~~谢谢拉~~谢谢拉~~
      

  6.   

    你看看是不是句柄的问题
    if falg=0 then             'falg 为一个标志~用于判断接字符,还是二进制数组
    Winsock1.GetData data, vbString   'falg=0 接字符
    falg=1                      '将falg=1 ,准备为接二进制数组
    else
    if falg=1 then               'falg=1 ,接二进制数组
    Winsock1.GetData temp, vbByte
    dim f as long
    f=freefile
    Open "out.jpg" For Binary As #f
    Put #f, , temp
    Close #f
    tfalg = 0
    end if
    END if
      

  7.   

    我也遇到和楼主相似的问题,在TCP下只可以触发一次connect,RemonteHost一赋值就报错。SP5我下了,但安装不了,我的系统是XP。而且,我用UDP传没有反应。至于你的LoadPicture错误,我想可能是参数不带路径的原因。
      

  8.   

    谢谢~快要真的疯拉~~~~~~~
    崩溃啊~~~~句柄我也换拉~~
    反正拿VB的image和Picture控件他就是死活不打开~~!!!!!
    "图片无效"!~其他任何方法都可以打开~~(直接打开,delphi等都可以)~~!真是见鬼拉~~~大家以前需要在TCP下连续两次发送和接受两次不同类型的数据只怎么做的~~谢谢拉~~
      

  9.   

    我这边真的可以打开,就是要打路径加上,比如:
    LoadPicture("e:\out.jpg")
      

  10.   

    我的提是转换为jpg格式后传过来的~
    不知道是不是这个原因~
    谢谢~
      

  11.   

    不是"提是" 呵呵是"图片'我的 "图片" 转换为jpg格式后传过来的~
    不知道是不是这个原因~
    谢谢~急啊~
      

  12.   

    你用2个socket试验一下,一个传消息,一个传文件看看
      

  13.   

    这样你先把图片传过来,在用一个新写的小程序打开图片看能不能打开,如果不能打开就是格式转换的问题,如果能 打开那么,你贴dataarive的事件的全部处理
      

  14.   

    谢谢影子兄拉~接受端~  (图片小于8K)Dim data As String 
    Dim temp() As ByteIf falg = 0 Then       'falg是个全局变量,在Form_Load()时已经赋值为0
    Winsock1.GetData data, vbString
    Text1.Text = data
    falg = 1ElseIf falg = 1 Then
    ReDim temp(bytesTotal)
    Dim f As String
    f = FreeFile
    Winsock1.GetData temp, vbByte
    Open "out.jpg" For Binary As #f
    Put #f, , temp
    Close #f
    tfalg = 0
    End IfEnd If
    发送端:Dim aryContent() As Byte
    Dim f As String
    f = FreeFile
    Dim i As Long
    i = 0
    Dim strFileName1 As String
    strFileName1 = "in.jpg"
    Open strFileName1 For Binary As #f
    filesize = LOF(1)
    ReDim aryContent(filesize) Do While Not EOF(1)
              Get #f, , aryContent(i)
            i = i + 1
      Loop
      
        Close #f
    Winsock1.SendData Text1.Text   
    DoEvents
    Winsock1.SendData aryContent
    '如果把两次SendData放在两次事件触发下就可顺利传输~
      

  15.   

    在vb中不能打开~~
    但我是奇怪~为什么把两次SendData放在两次事件触发下就可顺利传输~如果图片转换上有问题的话,应该也不行才队~
      

  16.   

    我在发送端的winsock1.Dataarive事件下放个判断语句Winsock1.GetData data, vbString 
    if data=first then
    Winsock1.SendData Text1.Text   
    else
    if data=second then 
    Winsock1.SendData aryContent
    end if
    end if然后由 接收端 发出控制信息(按顺序分两次发出first和second),来触发 发送端 的不同的SendData事件,还是不行~~按说也是两次触发了 发送端 的winsock1.Dataarive事件!和把两句发送语句放在两个Command控件下触发应该是一样的~可还是不能发送~
    就算写成
    .
    .
    .
    winsock1.senddata text1.text
    Call Command1_Click
    .然后
    Private Sub Command_Click()
    Winsock1.SendData aryContent
    End Sub也不行~
    就算我在 接收端 发出控制信息
      

  17.   

    你用2个socket不行吗,一个传指令,一个传文件不行吗。控制还简单
      

  18.   

    影子大哥~~
    呵呵
    没用过两个winsock同时用tcp协议的~
    我写为,
    服务器端:
    Private Sub Form_Load()
    Winsock1.LocalPort = 1001
    Winsock1.Listen
    Winsock2.LocalPort = 1002
    Winsock2.Listen
    End Sub客户端为:
    Private Sub Command1_Click()
    Winsock1.RemoteHost = "127.0.0.1"
    Winsock1.RemotePort = 1001
    Winsock1.Connect
    Winsock2.RemoteHost = "127.0.0.1"
    Winsock2.RemotePort = 1002
    Winsock2.Connect
    End Sub却连不上!
    是不是tcp是点对点的~一个IP只能同时连接一个端口~用另外一个时要把上一个断开~谢谢~
      

  19.   

    影子大哥~~
    呵呵
    没用过两个winsock同时用tcp协议的~
    我写为,
    服务器端:
    Private Sub Form_Load()
    Winsock1.LocalPort = 1001
    Winsock1.Listen
    Winsock2.LocalPort = 1002
    Winsock2.Listen
    End Sub客户端为:
    Private Sub Command1_Click()
    Winsock1.RemoteHost = "127.0.0.1"
    Winsock1.RemotePort = 1001
    Winsock1.Connect
    Winsock2.RemoteHost = "127.0.0.1"
    Winsock2.RemotePort = 1002
    Winsock2.Connect
    End Sub却连不上!
    是不是tcp是点对点的~一个IP只能同时连接一个端口~用另外一个时要把上一个断开~谢谢~
      

  20.   

    都能连上啊,你要注意客户端的这个事件
    winsock_connect 他是在winsock连接成功时触发 连接不成功就不会触发,有可能是连接不成功造成的,你看看触不触发
      

  21.   

    Winsock2.Connect没联上~~呵呵正在看你以前写的一篇 tcp传输的文章~~
    呵呵
    只是我初学~不是很看得懂~~(p:你的文章中的发送端是用控件数组,那这个数组有多长呢~还是由传输的文件大小决定的~每个winsock(i)只传一次~,怎么我一直都只能看到winsock(0))
      

  22.   

    ----------------------------------------------------------------
    原贴内容:
    可以连多个阿,你写的没问题啊,我用了两个winsock,但还是要放在两个事件下连接~~
    发送也是~~呵呵  无奈啊~我现在正在看你以前的文章~想象你一样用DataArrival事件来做~~(我简直怀疑市布是我装的VB出问题拉~呵呵)谢谢拉~
      

  23.   

    说实话,我没看什么书,我的经验就是我在写1个通讯器时走的全部的弯路。再就是最好的老师是csdn
    我现在学到的都是在测试和实践中总结的,有问题不怕,关键是解决问题和分析问题
      

  24.   

    握觉得你的关键恐怕是经常close和connect最好这样的事成功后不要反复作,因为执行这些事情需要时间的,你看qq传文件的时候还需要好长时间建立连接那