SendBuf / ReceiveBufの使用法

解決


KOU  2007-02-01 09:18:51  No: 24705  IP: 192.*.*.*

ClientSocket1.Socket.SendBufで送信し、
ServerSocket1.Socket.ReceiveBufで受信したいのですが
使用法がわかりません。

ClientSocket1.Socket.SendBuf(Buf, 1);
さすがにこれだけじゃBufすべてを送れないですよね。汗

どなたかコードを教えて頂けないでしょうか。
Delphi Personal6です。

編集 削除
deldel  2007-02-01 09:30:58  No: 24706  IP: 192.*.*.*

文字列でいいのなら、こんなのじゃないですか?

s := ClientSocket1.Socket.ReceiveText;
ClientSocket1.Socket.SendText('AAA');

編集 削除
KOU  2007-02-01 12:19:11  No: 24707  IP: 192.*.*.*

>>deldelさん
早速のお返事ありがとうございます。
文字列ではなくて、型はSmallIntです。
よろしくです。

編集 削除
あばうと  2007-02-01 17:25:17  No: 24708  IP: 192.*.*.*

送りたいSmallInt型のデータをBufに全部入れてから
ClientSocket1.Socket.SendBuf(Buf, データのバイト数);
データ量が巨大ならば分けて送った方がいいけど。
Readイベントの受信バイト数は Socket.ReceiveLength

編集 削除
KOU  2007-02-02 18:57:17  No: 24709  IP: 192.*.*.*

>>あばうとさん
試しにデータ送受信のみのフォーム作ってみたんですけど
うまいこと受信してくれません。


var
  Buf1 : array[0..4] of SmallInt;
  Buf2 : array[0..4] of SmallInt;

clientconnectイベント
Buf1len := Length(Buf1);
ClientSocket1.Socket.SendBuf(Buf1, Buf1len);

serverReadイベント
Buf2len := ServerSocket1.Socket.ReceiveLength;
ServerSocket1.Socket.ReceiveBuf(Buf2, Buf2len);

編集 削除
一歩  2007-02-02 22:57:05  No: 24710  IP: 192.*.*.*

ServerTypeは stNonBlocking?
Connect出来ているのなら受信出来ると思うけど。
LocalHostで試してみたら?

編集 削除
KOU  2007-02-03 05:14:31  No: 24711  IP: 192.*.*.*

>>一歩さん
stNonBlockingです。
LocalHostでのテストなのでConnectに問題はないはずなのですが
Server/Read時のBuf2lenが0になっていました。
使い方を間違っているのでしょうか・・・

編集 削除
二歩  2007-02-03 23:05:07  No: 24712  IP: 192.*.*.*

>Buf2len := ServerSocket1.Socket.ReceiveLength;
>使い方を間違っているのでしょうか・・・
TServerWinSocketとTCustomWinSocketは別物。

>Buf1len := Length(Buf1);
これも間違い。

編集 削除
KOU  2007-02-06 03:16:44  No: 24713  IP: 192.*.*.*

>>二歩さん
使い方を間違えているところが多かったようです。
再度、調べなおしてみました。

ReceiveLength
受信できるデータ量の設定みたいですね。

Buf1len := Length(Buf1)
これではBuf1の配列数しか取得できないので、
バイナリのデータ数とは違う、ということでしょうか。

しかしこれに代わるものを見つけることができませんでした。
よろしければソースを教えて頂けないでしょうか。
よろしくお願いします。

編集 削除
散歩  2007-02-06 09:16:07  No: 24714  IP: 192.*.*.*

>Buf2len := ServerSocket1.Socket.ReceiveLength;
このSocketがTCustomWinSocketであれば、ReceiveLengthで
受信バイト数を取得可能。Delphiのヘルプの記述はチョット舌足らず。

Buf1len := Length(Buf1);
Buf1len := Sizeof(Buf1);
この違いはヘルプを見れば分かるね。

編集 削除
KOU  2007-02-06 12:08:13  No: 24715  IP: 192.*.*.*

>>散歩さん
1,2,3とお返事頂きありがとうございます。
おかげ様で無事に配列を送信できました^^

Buf1len := Length(Buf1);
Buf1len := Sizeof(Buf1);

これが、ミソでした。
みなさんありがとうございました!

編集 削除