在WINSOCK 中如何传送结构(100分)

  • 主题发起人 主题发起人 whether_bobo
  • 开始时间 开始时间
W

whether_bobo

Unregistered / Unconfirmed
GUEST, unregistred user!
server 用delphi,window
client 用c,dos
想传送 格式为:
aaa=record
devent:word;
dlen:word;
dnote:word;
end;
1应该用 nonblocking 还是 threadblocking
2用sendbuf sendstream and receivebuf给个具体的例子?
我在onread中
socket.receivebuf(^buffer,sizeof(buffer))
buffer为 ^aaa 不行,好像要收很多次,收到后怎么在恢复为aaa的格式?
3 若分开传送,应如何加标志,给个例子
4 C中应如何编程

 
#define WORD unsigned short

typedef struct
{
WORD devent;
WORD dlen;
WORD dnote
}type_aaa;

.....
unsigned char buf[10];
type_aaa* aaa;

memset(buf,0,10);
aaa=(type_aaa*)buf;
aaa->devent=1;
aaa->dlen=2;
aaa->dnote=3;
.....
send(s,buf,len,0)
你用的是TCP还是UDP?

 
TCP,发送怎么都能发出去,接收的结果不对
 
主要是和发送的字节顺序有关。试试这样:

#define BYTE unsigned char

typedef struct
{
BYTE devent[2];
BYTE dlen[2];
BYTE dnote[2];
}type_aaa;

void WTB(WORD dw,BYTE b[2])
{
WORD tdw=0x00ff;
b[0]=(dw & (tdw<<8))>>8;
b[1]=(dw & tdw);
}

....
memset(buf,0,10);
aaa=(type_aaa*)buf;
WTB(1,aaa->devent);
WTB(2,aaa->dlen);
WTB(3,aaa->dnote);
send...

 
没玩过!
 
看不懂,不是转换的事,我要问怎么发结构
 
send(s,buf,len,0)就是发送结构呀。
 
那接收呢
 
在接收程序中定义
typedef struct
{
WORD devent;
WORD dlen;
WORD dnote
}type_aaa;
unsigned char buf[??];
type_aaa* aaa;
memset(buf,0,10);
socket.receivebuf(^buffer,sizeof(buffer))
memcpy(^buffer,aaa,sizeof(aaa));
然后就可以引用aaa->devent什么的了
或者象zw84611所说
直接将AAA指针指向BUF,也可以不使用COPYMEMONY

 
你把指针发出去有什么用啊!指针的内容还在你的电脑里啊!
socket.receivebuf(buffer,sizeof(buffer))
 
“ ^ ”是pascal里的符号,不是c的。
 
尽管没有满意答案
 
后退
顶部