アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。現在、VisualBasicでwinsockを利用して
jpg画像の転送をやりたいと思っているのですが、うまくいきません。
制御用のプログラムなのでjpg画像は2分割して送ります。
ちょっと汚いソースで申し訳ないのですが、クライアント側は以下のようになってます。ソケット1で通信の制御信号を送受信して、ソケット2で実際の画像データを送信します。画像は2分割にして送ります。

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim sSend As String
Dim buffer() As Byte
Dim lSendSize As Long

Winsock1.GetData buf, vbString, bytesTotal
Select Case buf
Case SIG_REQUESTIMAGE
    f = FreeFile
sFile = "send.jpg"
Open sFile For Binary As #f
lFileSize = LOF(f)
sSend = CStr(lFileSize)
Winsock1.SendData sSend
DoEvents
Case "reciv_size" '画像サイズ受信確認信号1
      lSendSize = lFileSize - 1
l1SendSize = lSendSize / 2
l2SendSize = lSendSize - l1SendSize
ReDim buffer1(l1SendSize)
ReDim buffer2(l2SendSize)
Get #f, , buffer1
      sCommand = CStr(buffer1)
Get #f, , buffer2
Winsock2.SendData sCommand
 Case "reciv1" '画像サイズ受信確認信号2
sCommand = CStr(buffer2)
      Winsock2.SendData sCommand
      Close #f

A 回答 (2件)

>例えばファイルサイズが1000バイトで、クライアント側からサーバ側に


>Senddataで1000バイトを送信すると、サーバ側では700バイトとか
>違った数字で受信されてしまいます。これは、BytesTotalの値のことです。
>どうしてそうなるのか、全く理解できません。

そういう仕様だからです。

WinSockでは受信処理で、受信データの制御はできません。
あなたのプログラムで、予期しないバイト数でデータを受信したときの処理を
実装する必要があります。

この回答への補足

いろいろしらべてみまして、なんとかできました。
ありがとうございました。

補足日時:2002/02/19 01:25
    • good
    • 0
この回答へのお礼

ありがとうございます。
やってみます。
どうもありがとうございました。
初心者なので、またわからなくなったら質問しますのでどうぞ
よろしくお願いします。

お礼日時:2002/02/18 16:48

hiromichelです。


先ほどの続きです。サーバ側のほうはこのようになっています。

Private Sub Winsock2_DataArrival(ByVal bytesTotal As Long)
Dim buf() As Byte
Static counter As Long

If StateFlag = 1 Then

ReDim buf(bytesTotal - 1)
    Winsock2.GetData buf ', vbArray + vbByte, bytesTotal

Put #f, , buf

StateFlag = 1

Winsock1.SendData "reciv1"
End If
If StateFlag = 1 Then
ReDim buf(bytesTotal - 1)
    Winsock2.GetData buf ', vbArray + vbByte, bytesTotal
Put #f, , buf

If ProgressBar1.Value = ProgressBar1.Max Then

counter = counter + 1
Close #f
DoEvents


と、ソースは上のようになっていますが、問題は、
例えばファイルサイズが1000バイトで、クライアント側からサーバ側に
Senddataで1000バイトを送信すると、サーバ側では700バイトとか
違った数字で受信されてしまいます。これは、BytesTotalの値のことです。
どうしてそうなるのか、全く理解できません。締め切りが近くて困ってます...。
良いアドバイス、解決法などを待っています。どうかお願いします。
    
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!