从服务器端硬盘去图片,转成数据流,winsock通信,到客户端将流变成图片放在pictureBox内!已经折腾了好几天,都没有搞定,下面把源码贴出来,请高人指点!

解决方案 »

  1.   

    客户端:
    Private Sub cdmFind_Click()
    If tcpClient.State = sckConnected Then
    txtsenddata$ = Text3.Text
    tcpClient.SendData txtsenddata$
    End If
    End Sub
    Private Sub cmdProperty_Click()
    Form2.Visible = True
    End Sub
    Private Sub cmdConnect_Click()
    tcpClient.RemoteHost = Ip_code
    tcpClient.RemotePort = CLng(Port_code)
    If tcpClient.State <> sckConnected Then
    tcpClient.Connect
    StatusBar1.Panels(1) = "连接中"
    End If
    cmdConnect.Enabled = False
    End SubPrivate Sub Form_Load()
    'Form2.Visible = False
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
    Unload Form2
    End Sub
    Private Sub tcpClient_Connect()
    StatusBar1.Panels(1) = "连接建立"
    End Sub
    Private Sub tcpClient_Close()
    StatusBar1.Panels(1) = "已断"
    tcpClient.Close
    cmdConnect.Enabled = True
    End Sub
    Private Sub tcpClient_DataArrival(ByVal bytesTotal As Long)
        Dim getbyte() As Byte
        tcpClient.getdata getbyte
        Picture1.OLEDragMode = vbOLEDropManual
    End Sub
      

  2.   

    服务器端:Private Sub Form_Load()
    Ip_code = Trim(txtIP.Text)
    Port_code = Trim(txtPort.Text)
    'Winsockserver.Protocol = sckTCPProtocol
    Winsockserver.LocalPort = Port_code
    'Winsockserver.LocalIP = Ip_code
    Winsockserver.Listen
    End Sub
    Private Sub cmdOK_Click()
    If Winsockserver.State <> sckClosed Then _
    Winsockserver.Close
    Winsockserver.RemoteHost = "127.0.0.1"
    Winsockserver.RemotePort = 8888
    If Winsockserver.State <> sckConnected Then
    Winsockserver.Connect
    StatusBar1.Panels(1) = "连接中"
    End If
    'cmdConnect.Enabled = False
    Dim sendBytes() As Byte
    Dim i As Long
    Dim filename As String
    filename = "D:\tp\173.gif"
    i = FileLen(filename)
    ReDim sendBytes(i) As Byte
    Open filename For Binary As #1
    Get #1, , sendBytes
    Close #1'On Error GoTo MathHandler
      Winsockserver.SendData sendBytes
    'MathHandler:
     '  If Err.Number = MnErrDivByZero Or _
      ' Err.Number = ErrOverFlow _
       'Or Err = ErrBadCall Then
        '  Divide = Null   ' 如果错误是被零除、溢出或非法过程调用,
                         ' 则返回 NULL。
       'Else
          '显示意想不到的错误信息。
        '  Msg = "Unanticipated error " & Err.Number
         ' Msg = Msg & ": " & Err.Description
          'MsgBox Msg, vbExclamation
      ' End If
    'Dim bin() As Byte
    'ReDim bin(FileLen("图片的文件名")) As Byte
    'Open "图片的文件名" For Binary As #1
    'get #1,bin()
    'Close #1
    'txtsenddata$ = "888"
    'Winsockserver.SendData txtsenddata$
    Winsockserver.Close
    End Sub
    Private Sub Winsockserver_Close()
    Winsockserver.Close
    End
    End Sub
    Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)
    If Winsockserver.State <> sckClosed Then Winsockserver.Close
    Winsockserver.Accept requestID
    End Sub
    Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)
           'textget.Text = tmpstr
         ' Dim getBytes() As Byte
          'Winsockserver.GetData getBytes
          'Picture1.Picture = getBytes()
          Dim getdata As String
          Winsockserver.getdata getdata
          textget.Text = getdata
    End Sub
      

  3.   

    http://community.csdn.net/Expert/topic/3209/3209104.xml?temp=.1535303
    不会走就想飞
      

  4.   

    老大催的很急,已经连续两天挨训啦,实在没有办法啦,小女子想破头也不知道怎么做,查了msdn,也到网上搜了,就是搞不定,现在停在Winsockserver.SendData sendBytes这一行,提示实时错误‘40006’:所需事物或请求协议或连接状态。高手快来救救我。
      

  5.   

    不是我要飞的,以前就没有写过软件,刚学了3个月的c#,这回来了项目,老大就让用VB做这个,开始我连什么叫winsock都不知道,麻烦大家帮我看看代码,什么地方有问题我赶紧改出来,本来昨天下午就要的,我没弄好,今天再不好,又要挨训啦,55555~~~
      

  6.   

    重新贴一下服务器,太乱啦!Private Sub Form_Load()
    Ip_code = Trim(txtIP.Text)
    Port_code = Trim(txtPort.Text)
    'Winsockserver.Protocol = sckTCPProtocol
    Winsockserver.LocalPort = Port_code
    'Winsockserver.LocalIP = Ip_code
    Winsockserver.Listen
    End Sub
    Private Sub cmdOK_Click()
    If Winsockserver.State <> sckClosed Then _
    Winsockserver.Close
    Winsockserver.RemoteHost = "127.0.0.1"
    Winsockserver.RemotePort = 8888
    If Winsockserver.State <> sckConnected Then
    Winsockserver.Connect
    StatusBar1.Panels(1) = "连接中"
    End If
    'cmdConnect.Enabled = False
    Dim sendBytes() As Byte
    Dim i As Long
    Dim filename As String
    filename = "D:\tp\173.gif"
    i = FileLen(filename)
    ReDim sendBytes(i) As Byte
    Open filename For Binary As #1
    Get #1, , sendBytes
    Close #1  Winsockserver.SendData sendBytesWinsockserver.Close
    End Sub
    Private Sub Winsockserver_Close()
    Winsockserver.Close
    End
    End Sub
    Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)
    If Winsockserver.State <> sckClosed Then Winsockserver.Close
    Winsockserver.Accept requestID
    End Sub
    Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)
        
          Dim getdata As String
          Winsockserver.getdata getdata
          textget.Text = getdata
    End Sub
      

  7.   

    你的客户程序还没有同服务器连接好你就使用了SendData语句,如: 
        socClient.Connect sServer 
        socClient.SendData txtSend.Text 
        调用了Connect语句后,控件立即返回,此时连接尚未建立。你应该在socClient_Connect事件中使用Winsockserver.SendData sendBytes
      

  8.   

    zyg0(影子(努力吃饭中)) 
    当然可以
    都是流
    可是怎么把这个流放到picturebox里面去啊?
      

  9.   

    服务器
    Option Explicit
                  Public FileNumber As Integer
                  Public pdSERver As Boolean
    Public GetFileNum As Integer
    Private Sub Command1_Click()
    On Error Resume Next
            If Dir(Text3.Text) = "" Or Text3.Text = "" Then
            MsgBox "没有可以传送的文件~", vbCritical, "Server"
            Else
           
            GetFileNum = FreeFile '取得未使用的文件号
            LenFile = FileLen(Text3.Text) '获得需传送的文件的长度
            '------------------
        
            VarPlus = 0
            '------------------
            Open Text3.Text For Binary As #GetFileNum '打开需传送的文件
          
            Command2.Enabled = False
            Call TCPSendFile(frmmain.Winsock1, GetFileNum, SplitFile)
            End If
    End Sub
            Public Function SplitFile() As Long
            On Error Resume Next
            Dim GetCount As Long
            
            '计算出这次可发送的字节数
            If LenFile >= 8000 Then
            GetCount = 8000
            LenFile = LenFile - GetCount
            Else
            GetCount = LenFile
            LenFile = LenFile - GetCount
            End If
            '-----------------------------------------
            VarPlus = VarPlus + GetCount
            ProBar.Value = (VarPlus / ProBarLen) * 100
            '-----------------------------------------
            SplitFile = GetCount
            'Me.ActiveControl
            
            End Function
    客户端
    Private Sub Winsock1_SendComplete()
            On Error Resume Next
           
            If 0 = LenFile And pdSERver Then
             Close #GetFileNum
            Else
             Call TCPSendFile(Winsock1, GetFileNum, Server.SplitFile)
            End If
        
            
    End Sub
    Private Sub Winsock1_Connect()
    On Error GoTo errend
    Dim temp As String * 8
    Dim a() As Byte
    Dim sql As String
    temp = Hstrid
    sql = temp & "/<}&$+X$Z"
    a = sql
    Winsock1.SendData a
    Exit Sub
    errend:
    MsgBox "连接发生错误!数据发送失败!11111", vbOKOnly + vbExclamation, "TCP 错误信息"
    End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim FileByte() As Byte
    Dim sql As String
    Winsock1.GetData FileByte, vbArray + vbByte '接收类型为:字节数组
            
            Put #FileNumber, , FileByte '----------标线:)-------------
            
    '        '--------------- 进度显示 ----------------
            VarPlus = VarPlus + (UBound(FileByte) + 1)            Client.ProBar.Value = Int((VarPlus / LenFile) * 100)
               If Client.ProBar.Value = 100 Then
                        Close #FileNumber
                        
                       
                        Winsock2.SendData SetMsge("/filetook", Hstrid, Client.Caption, "")
                        DoEvents
                     
                        MsgBox "传送完毕", 0 + 32, App.Title
                        Unload Client
                End If
    End Sub
      

  10.   

    GGL123() 不是吧连上了啊,我的客户端已经可以把textbox的数据发到服务器端,服务器端也可以把textbox的数据发到客户端,就是变成byte就不行啦!
      

  11.   

    //可是怎么把这个流放到picturebox里面去啊?
    你存成文件,然后放到picturebox中,然后删除文件
    整理的匆忙,你仔细看,可能有些变量没定义,自己参考一下吧,我写的欠在程序中分离不出来
      

  12.   

    思路没有搞清楚就去做程序当然难啦客户端连接到服务器,服务器发送图片数据到客户端,客户端将数据保存在一个临时文件中,服务器发送完后关闭连接(客户端以此来判断数据是否已经传送完毕Closed事件,如果不关闭还想保持连接,那就麻烦一些啦,在服务器发送数据之前应该告诉客户端数据的大小,这样客户端才能知道什么时候传完,此种情况下最好有两个Winsock,一个传文本,一个传BYTE),发送完后用Picturebox显示临时文件,删除临时文件。要连接后再SendData,最好在Connected中SendData,要不然用个DoEvents,直到State=sckConnected