windows和UNIX通过socket通讯的问题!十分急,在线等待!(100分)

  • 主题发起人 主题发起人 loding
  • 开始时间 开始时间
L

loding

Unregistered / Unconfirmed
GUEST, unregistred user!
我要编写一个socket客户端,与我公司的服务器互连,整个消息结构体如下:

Command Length 4 longInt 整个消息的长度
Command ID 4 longint 命令
Sequence No. 4 longint 序列号,保证唯一性
username 16 char 用户名
passwd 16 char 密码
命令的取值如下:
Command ID 编码 Command ID Command ID取值
ESME_BNDRCV Bind_receiver 0X00000001
ESME_BNDRCV_RESP Bind_receiver_resp 0X80000001
......
我如何将这些内容写入一个字符串流,

我看有资料说longint在unix和windows存储格式不一样,高低位不一样,
unix和windows之间socket通信要做怎么样的转换!

小弟没做过socket的东西,希望各位能够指点的详细一点.如果有现成例子将十分感谢!
 
用 ntohl() 函数转换就可以了。记得加上 uses WinSock;
 
还望指点的详细点,
 
/************************************************************************
* ntohl Convert a long from network to host byte ordering. (#include <netinet/in.h>)
* byte 1234->4321 eg:0x12345678 -> 0x78563412
~~~~~~~~~~~~~~
htons
The Windows Sockets htons function converts a u_short from host to TCP/IP network byte order (which is big-endian).

u_short htons (
u_short hostshort
);
~~~~~~~~~~~~~~~~~~~~
htonl
The Windows Sockets htonl function converts a u_long from host to TCP/IP network byte order (which is big-endian).

u_long htonl (
u_long hostlong
);

~~~~~~~~~~~~~~~
ntohl
The Windows Sockets ntohl function converts a u_long from TCP/IP network order to host byte order (which is big-endian).

u_long ntohl (
u_long netlong
);

~~~~~~~~~~~~~~~~~~~
ntohs
The Windows Sockets ntohs function converts a u_short from TCP/IP network byte order to host byte order (which is big-endian).

u_short ntohs (
u_short netshort
);
 
主要是字节顺序不一样
发送时,最好都转化为网络字节顺序
 
to zw84611:
不是我懒惰,为这个问题我已经华了50个工作小时了.头都大了.
你看我的思路对不对:首先,将各个字段写入一个数据流中.
下一步将这个数据流转换为网络字节序,
然后在client中将这个数据流用SendStream发送.

现在第一步我都实现不了,用
var
mystream:TMemoryStream;
CommandID:integer;
username:string[16];
begin
myStream:=TMemoryStream.Create;
myStream.Write(CommandID,sizeof(CommandID));
myStream.Write(username,length(username));
end;
就是写不进取.
还望你多多指点.能否将实现的以上几步的过程给个列子.
 
后退
顶部