PB 電子会議室
カテゴリ:PowerBuilderの開発環境
日付:2001年06月20日 20:37 発信者:あすかちゃんの父
題名:RE(4):PB7.0: Socket通信 recvのロジックについて
Rtさん、こんばんは。
>しかし、recvの受信は一度ですべて受信できるような感じのロジックだったので
>こちらに書き込んだ次第でありました。
RtさんはWinsockを同期モードで使っていませんか?私の作った
ソケット通信のプログラムは非同期モードを使っていて、一度に
全てのデータを受信しているわけではありません。
非同期モードでは、Winsockがデータを受信してプロトコル・ス
タック・バッファにデータを引き取ると、アプリケーションに対
してFD-READイベントで通知してきます。ですので、長いデータ
を分割して受信するたびにFD-READイベントが起動して、そのイ
ベントの中でデータを引き取っています。
同期モードの場合は定期的にrecv関数をコールしてデータを受信
していないか確認する必要がありますので、Rtさんのロジックで
問題ないと思います。
ただバッファメモリ用配列lc_chkで、recv関数で受信完了した分
シフトしながら次に受信したデータを引き取っていますよね。
ということは引き取った分だけrecv関数の使えるバッファメモリ
のサイズが小さくなるのに、バッファサイズ指定のll_recv_len_chk
は3000で固定になっているので、ここで配列の境界を越えたりし
てませんでしょうか。
recv関数で引き取るためのバッファメモリと、分割して引き取っ
たデータを結合するバッファメモリを分けた方がいいと思います。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows 2000
DBMS (記載なし)
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Sybase SQL Anywhere Server
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.