SendBuf / ReceiveBufの使用法

解決


KOU  2007-02-01 18:18:51  No: 24705

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

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

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


deldel  2007-02-01 18:30:58  No: 24706

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

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


KOU  2007-02-01 21:19:11  No: 24707

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


あばうと  2007-02-02 02:25:17  No: 24708

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


KOU  2007-02-03 03:57:17  No: 24709

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

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-03 07:57:05  No: 24710

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


KOU  2007-02-03 14:14:31  No: 24711

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


二歩  2007-02-04 08:05:07  No: 24712

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

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


KOU  2007-02-06 12:16:44  No: 24713

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

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

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

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


散歩  2007-02-06 18:16:07  No: 24714

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

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


KOU  2007-02-06 21:08:13  No: 24715

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加