HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0329
nicoファイルの送信について6解決


nico

リンク

2009/3/29(Sun) 22:19:22|NO.24250

HSPSOCKを使ってPC間で交換できるソフトを作っています。
ファイルを送信、受信をする部分で詰まってしましたので質問させてください。
もし良ければですが、適当なサンプルでもあれば是非拝見させていただきたいです。



受信のほう。

#include "hspsock.as" screen 0,350,130,0 color 0,0,0:boxf:color ip = "127.0.0.1" port = 11111 repeat sockmake 0,port if (stat!0){goto *_end} if stat=0:break wait 5 loop repeat sockwait 0 if stat=0:break wait 5 loop wait 5 title"接続" // a="" sdim a,40000 sockgetb a,,40000,0 bsave"test1111.bmp",a stop *_end sockclose end

送信の方。

#include "hspsock.as" screen 0,350,130,0 color 0,0,0:boxf:color ip = "127.0.0.1" port = 11111 objsize 200,19:pos 20,20:input ip color 255,255,255 pos 225,20:print "接続先" pos 20,50:input port pos 225,50:print "ポート" pos 155,90:objsize 50,19 button"接続",*connect stop *connect sockopen 0,ip,port if (stat!0){goto *_end} title"接続しました" exist "test.bmp" size=strsize sdim buf,size bload "test.bmp",buf,size sockputb buf,,40000 stop *_end sockclose end

ファイルだけ作られ中身は空っぽ・・・といった感じになってしまいます。4バイトだけ入ってる時も・・?
HSP始めたばかり初心者なので悪いところ、訳の解らないことをしている所など沢山あると思いますが、よろしくお願いします。




この記事に返信する


nico

リンク

2009/3/29(Sun) 22:21:41|NO.24252

最後のスクリプト出ない部分まで青文字で入ってしまってすいません;
今後気を付けます。



ORZ

リンク

2009/3/29(Sun) 22:35:10|NO.24253

受信バッファにデータが到着する前に勝手に保存しているのがいけないのではないでしょうか。



nico

リンク

2009/3/29(Sun) 22:48:36|NO.24254

回答ありがとうございます。



a="" sdim a,40000 sockgetb a,,40000,0 bsave"test1111.bmp",a stop

の前に

repeat sockcheck 0 if stat=0:break wait 1 loop
と入れてみたんですが、やはり結果は同じで、空白ファイルが保存されてしまいました。



Sucret

リンク

2009/3/29(Sun) 23:01:29|NO.24256

 40000byte固定送信になっているのでそのサイズのファイルでないと
正確に送れません。

手順としては、
 送信側はexistで取得したファイルサイズを送信サイズに指定します。
 受信側にそのサイズを送信しなければ受信側はファイルサイズが変わってしまうので
送信側はファイルサイズを送信します。
 送信側はファイルサイズ分を一気にsockputbで送ります
(ファイルサイズが大きい時は分割したほうが良い場合も)。
 受信側は一気に受信…することは出来ないみたいなのでとりあえずsockgetbで
受信できるだけ受信します。
 statに受信したサイズが代入されるので次からはstatの合計値をオフセットに
データを保存します。

ファイルの送受信だけならこれで可能です。
2GB以上のファイルの扱いは分かりかねますが…。



ORZ

リンク

2009/3/29(Sun) 23:13:33|NO.24257

hspsockは受信バッファに到達したデータサイズを調べる事ができないみたいですね・・・さっく!
Sucret氏の言うとおり、最初にファイルサイズを4byte程送信してやり、受信側でオフセットを駆使して
逐一受信して行く事になるでしょう。



nico

リンク

2009/3/30(Mon) 21:43:32|NO.24265

SucretさんORZさん回答ありがとうございます。
詳しい手順まで書いて頂いて感謝感謝です。

ずいぶん試行錯誤してみたものの解決には至らなかったのですが、
これらのヒントを基にもうちょっとだけ頑張ってみようと思います。

今回はこれで解決とさせていただきます。
回答本当にありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.