套接字socket.receivebuf属性如何实现接收? ( 积分: 100 )

  • 主题发起人 主题发起人 nhlong320
  • 开始时间 开始时间
N

nhlong320

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠,在下做的程序要实现接受IDs这条指令,它的command是12 11 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 2B F0,那位大侠给小弟执教一下,在下程序不对
procedure TchatForm.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Buffer: PChar;
begin
Memo.Lines.Add(Socket.ReceiveText);
Socket.ReceiveBuf(12 11 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 2B F0, Socket.ReceiveLength);
end;
 
各位大侠,在下做的程序要实现接受IDs这条指令,它的command是12 11 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 2B F0,那位大侠给小弟执教一下,在下程序不对
procedure TchatForm.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Buffer: PChar;
begin
Memo.Lines.Add(Socket.ReceiveText);
Socket.ReceiveBuf(12 11 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 2B F0, Socket.ReceiveLength);
end;
 
参考

http://www.delphibbs.com/delphibbs/dispq.asp?lid=171196
标题是: 如何使用tsocket的sendbuf和receivebuf (100分)
分类:Internet/TCPIP
 
大哥,我做的程序要求读取的是一条命令IDs,这条命令不是一个函数而是一条十六进制数
12 11 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 2B F0,小弟实在不知怎么做好,大哥给我点提示也行
 
记不太清楚了,大概是下面这样的,大虾看了要笑话了

procedure TForm1.FormCreate(Sender: TObject);
var
a : array[0..254] of Byte;
begin
FillChar(a,18, $00);
a[0] := $12;
a[1] := $11;
a[2] := $0E;
a[3] := $00;
a[16] := $2B;
a[17] := $F0;
ServerSocket1.Socket.SendBuf(a, 18);
end;
 
大哥,还是不行,如果用ServerSocket1.Socket.SendBuf(a, 18);发送,用clientSocket1.socket.receviebuf(a,18)接受,如何判断12 11 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 2B F0是一条命令
 
如果你发送的是定长,也就是说都18位,那很好处理,如果是定长的,可以先发送一个长度信息,然后接收的时候你就知道是18位了。

怎么发,也就怎么收,如何判断指令不是接收的事情,而是接收以后分析的事情,数组有了,判断a[0]=xxx, a[1]=xxx ,符合条件就是命令,至于怎么执行这个命令也是分析程序的事情,和接收没有关系,也就是所谓的协议
 
大哥说的有理,我现在发送有了
procedure TchatForm.ServerSocketListen(Sender: TObject;
Socket: TCustomWinSocket);
var
a : array[0..17] of Byte;
begin
FillChar(a,18, $00);
a[0] := $12;
a[1] := $11;
a[2] := $0E;
a[4] := $00;
a[5] := $00;
a[6] := $00;
a[7] := $00;
a[8] := $00;
a[9] := $00;
a[10] := $00;
a[11] := $00;
a[12] := $00;
a[13] := $00;
a[14] := $00;
a[15] := $00;
a[16] := $2B;
a[17] := $F0;
ServerSocket.Socket.SendBuf(a, 18);
end;
接受这时只是连接成功,如何读取这条命令
procedure TchatForm.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo.Lines.Add(Socket.ReceiveText);
end;
大哥给点提示,谢谢大哥
 
请各位大哥指点,不管能不能作出,下午都将分数发放
 
在Socket通信中,接收端只能接收到字串,具体要怎么处理需要你自己来定义。一般我们会定义一个客户端和Server端都遵循的标准,比如可以用一个Char来定义,01表示接收文本,02表示接收命令,03表示其他字串等等,都可以自己去定义,然后客户端和Server端均遵循这个标准就可以了。你的命令可以用02+你的命令(18位字长)来发送,Server端接收到02时,就知道是命令了。
 
多人接受答案了。
 
后退
顶部