服务器:
Option Explicit
Public Type aa
    dd As String * 2
    ee As String * 3
End TypePublic ff As aaPrivate Sub Form_Load()
   Winsock1.Protocol = sckTCPProtocol
   Winsock1.LocalPort = "2000"
   Winsock1.Listen
   FrmCli.Show
End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
   If Winsock1.State <> 0 Then Winsock1.Close
      Winsock1.Accept requestID
End SubPrivate Sub Command1_Click()
Dim a() As Byte
      Dim ss As String * 3
      ss = "ABC"     ‘如果把下面的ff.ee改为ss的话,在客户端也是乱码 
      ff.dd = "EF"
      ff.ee = "abc"
     ReDim a(2) As Byte
     Call CopyMemory(a(0), ff.ee, 3)
     Winsock1.SendData a
End Sub
*******************************************************************************
客户端:
Private Sub Command1_Click()
 If Winsock1.State <> 0 Then Winsock1.Close
  Winsock1.Connect
End SubPrivate Sub Form_Load()
  With Winsock1
       .Protocol = sckTCPProtocol
       .RemoteHost = "192.168.0.69"
       .RemotePort = 2000
  End With
End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
    Dim str As String
    Dim GetStr() As Byte
   ReDim GetStr(bytesTotal - 1) As Byte
   
     Winsock1.GetData GetStr, vbArray & vbByte, bytesTotal
      str = Chr(GetStr(0)) & Chr(GetStr(1)) & Chr(GetStr(2))
   
     MsgBox str
End Sub这样也不知道为什么,就是str乱码,我都不晓得是怎么会事!麻烦你指点指点,因为这个原因我的程序做起来很是麻烦,代码好多了!
  如果我只传递ff.ee= “abc”的话,我需要这样在定义一个数据类型
Public Type ReType
    Ree As String * 3
End Type
Public ReFF As ReType然后再使用
ReFF.Ree = ff.ee
Call CopyMemory(a(0), ReFF, 3)
          Winsock1.SendData a
这样的话解手到的数据就是  :   
Winsock1.GetData GetStr, vbArray & vbByte, bytesTotal
      str = Chr(GetStr(0)) & Chr(GetStr(1)) & Chr(GetStr(2))
   
     MsgBox str
Str = “abc”
 还希望高手指点指点呀!!我的油香地址是[email protected]
MSN: [email protected]

解决方案 »

  1.   

    Call CopyMemory(a(0), ReFF, 6)
    这样看看 
    string类型是占2位的
      

  2.   

    客户端也要用copymemory  要不是肯定会出乱码的
      

  3.   

    自己搞复杂了。不要什么类型和copymemory。Private Sub Command1_Click()      ff.ee = "abc"
          Winsock1.SendData ff.ee
    End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
         Dim str1 As String
         str1 = ""
         Winsock1.GetData str1, , bytesTotal
       
         MsgBox str1
    End Sub
      

  4.   

    楼主方法我试过,对于一个很小的数据可以这样发送,要是有个"#5001" "name" ,"birth" ,"score"
      要把5001做为2位发送,不用copymemory怎么也不可以实现,不是么?
      好啦不讨论了,也不耽误大家宝贵时间了,我结贴了哦!
      

  5.   

    len不能检测中文
    要用lenb()