服务器有一个TCP/IP通讯包,结构如下:
struct rec {
char RecId[11];
char RecNam[20];
unsigned char RecData[101];
char RecTyp[1];
};
typedef struct rec RECPUB;我现在用VB写一个客户端向服务器发数据,程序如下:
If SockC1.State = sckClosed Then SockC1.Close
        
SockC1.RemoteHost = "xxx.xx.xx.xx"
   SockC1.RemotePort = 37011
SockC1.Connect
If SockC1.State = sckConnected Then
SockC1.SendData buf
End If
SockC1.Close请问:
1、按上面的结构,应该如何组包,即buf如何定义?
2、我这段程序妥当吗?因为初次接触网络编程,很多都不懂,谢谢有心人!

解决方案 »

  1.   

    buf定义为字节数组,
    然后把rec结构数据转换为十六进制数,
    具体的Winsock编程,看帮助,找实例吧。
      

  2.   

    服务器是UNIX的,看了很多编程都是很简单的,也没有说到转换为十六进制的做法,请大家继续帮我看看吧?谢谢。
      

  3.   

    1楼的意思是要你把buf定义为字节数组,将rec结构数据读进去嘛
      

  4.   

    Private Type rec
      RecId(1 To 11) As Byte
      RecNam(1 To 20) As Byte
      RecData(1 To 101) As Byte
      RecTyp As ByteEnd Type
      

  5.   

    谢谢大家的帮助,我定义了结构,并赋予给数组,再发送出去便可以了,但又有奇怪的问题,按F8逐步逐步运行是OK的,但直接运行就发送过去的包是空的,程序如下:If SockC1.State <> sckClosed Then SockC1.Close
            
    SockC1.RemoteHost = "xxx.xx.xx.xx"   SockC1.RemotePort = 222222SockC1.ConnectDo While SockC1.State <> sckConnected: DoEvents
       If SockC1.State = sckError Then Exit Sub
    Loop
        
    SockC1.SendData bufSockC1.Close