ClientSocket1.Socket.SendBufで送信し、
ServerSocket1.Socket.ReceiveBufで受信したいのですが
使用法がわかりません。
ClientSocket1.Socket.SendBuf(Buf, 1);
さすがにこれだけじゃBufすべてを送れないですよね。汗
どなたかコードを教えて頂けないでしょうか。
Delphi Personal6です。
文字列でいいのなら、こんなのじゃないですか?
s := ClientSocket1.Socket.ReceiveText;
ClientSocket1.Socket.SendText('AAA');
>>deldelさん
早速のお返事ありがとうございます。
文字列ではなくて、型はSmallIntです。
よろしくです。
送りたいSmallInt型のデータをBufに全部入れてから
ClientSocket1.Socket.SendBuf(Buf, データのバイト数);
データ量が巨大ならば分けて送った方がいいけど。
Readイベントの受信バイト数は Socket.ReceiveLength
>>あばうとさん
試しにデータ送受信のみのフォーム作ってみたんですけど
うまいこと受信してくれません。
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);
ServerTypeは stNonBlocking?
Connect出来ているのなら受信出来ると思うけど。
LocalHostで試してみたら?
>>一歩さん
stNonBlockingです。
LocalHostでのテストなのでConnectに問題はないはずなのですが
Server/Read時のBuf2lenが0になっていました。
使い方を間違っているのでしょうか・・・
>Buf2len := ServerSocket1.Socket.ReceiveLength;
>使い方を間違っているのでしょうか・・・
TServerWinSocketとTCustomWinSocketは別物。
>Buf1len := Length(Buf1);
これも間違い。
>>二歩さん
使い方を間違えているところが多かったようです。
再度、調べなおしてみました。
ReceiveLength
受信できるデータ量の設定みたいですね。
Buf1len := Length(Buf1)
これではBuf1の配列数しか取得できないので、
バイナリのデータ数とは違う、ということでしょうか。
しかしこれに代わるものを見つけることができませんでした。
よろしければソースを教えて頂けないでしょうか。
よろしくお願いします。
>Buf2len := ServerSocket1.Socket.ReceiveLength;
このSocketがTCustomWinSocketであれば、ReceiveLengthで
受信バイト数を取得可能。Delphiのヘルプの記述はチョット舌足らず。
Buf1len := Length(Buf1);
Buf1len := Sizeof(Buf1);
この違いはヘルプを見れば分かるね。
>>散歩さん
1,2,3とお返事頂きありがとうございます。
おかげ様で無事に配列を送信できました^^
Buf1len := Length(Buf1);
Buf1len := Sizeof(Buf1);
これが、ミソでした。
みなさんありがとうございました!
ツイート | ![]() |