[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/08/25(Wed) 14:15
投稿者名:しんまい
Eメール:
URL :
タイトル:
Winsockコントロールが正常に動作しない
WinSockを使って,UDP/IP 通信を行っています。
開発環境はVB6.0 OSはWIN2000です。
この環境でソフトを作成し、Win2000では問題なく
動作しましたがWinXPでは、表示がばらつき安定しません。
XPではWinsokコントロールは使えないのでしょうか?

投稿時間:2004/08/25(Wed) 17:44
投稿者名:GOD
Eメール:
URL :
タイトル:
Re: Winsockコントロールが正常に動作しない
Winsockコントロールって通信用のコントロールなので表示はしないはずです。
「表示がばらつき」っていうのはどのような現象を指すのでしょうか。
表示側の問題と言うことは無いですか。

投稿時間:2004/08/25(Wed) 20:41
投稿者名:しんまい
Eメール:
URL :
タイトル:
Re^2: Winsockコントロールが正常に動作しない
> Winsockコントロールって通信用のコントロールなので表示はしないはずです。
> 「表示がばらつき」っていうのはどのような現象を指すのでしょうか。
> 表示側の問題と言うことは無いですか。
GODさん、早速のご返答ありがとうございます。
開発中のソフトは、クライアントがテキストボックス(数十個ある)で入力したデータを
変数に代入し、それをjoin関数で結合し、winsockコントロールでサーバーに送信します。
サーバーのwinsockコントロールで受信したデータはsplit関数で配列に分解し、クライア
ントと同じようなテキストボックスにデータを表示します。「表示がばらつく」といいま
すのは、クライアントの表示と同じ表示にしたいのですが、サーバー側のデータがテキスト
ボックスの間を流れてしまい、固定されません。ちなみにwindows2000ではOKなのです。
(クライアントの入力したデータをサーバーのフォームにタイムリーに表示させたいのでタイ
マーを使って400msecごと送信しています)
よろしくお願いします。

投稿時間:2004/08/26(Thu) 10:45
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^3: Winsockコントロールが正常に動作しない
> サーバー側のデータがテキストボックスの間を流れてしまい、固定されません。

この意味が良く分かりません。
とりあえず、XPと2000で同じデータが送られているか(受け取れているか)を確認した方がイイです。

投稿時間:2004/08/26(Thu) 11:04
投稿者名:しんまい
Eメール:
URL :
タイトル:
Re^4: Winsockコントロールが正常に動作しない
> > サーバー側のデータがテキストボックスの間を流れてしまい、固定されません。
>
> この意味が良く分かりません。
> とりあえず、XPと2000で同じデータが送られているか(受け取れているか)を確認した方がイイです。

nanashiさん、ありがとうございます。
xpと2000と比べながらトラブルシューティングしてみます。

投稿時間:2004/08/26(Thu) 11:00
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^3: Winsockコントロールが正常に動作しない
>「表示がばらつく」といいま
> すのは、クライアントの表示と同じ表示にしたいのですが、サーバー側のデータがテキスト
> ボックスの間を流れてしまい、固定されません。ちなみにwindows2000ではOKなのです。
>
すみません。やっぱり私には理解できません。
テキストボックスの間ってどこですか?流れるってどのように?
一定間隔で送信しているけど受信が一定間隔ではないということですか。
基本的にクライアント側から送信したデータをサーバー側は全て受信できているのでしょうか。
(確かUDPプロトコルは速度は速いけどデータの保証はしていなかったはずなので。)
受信→表示部分のプログラムを上げて見るのも一つの手かも知れませんね。
私以外でも何か意見をくれるかも知れませんよ。

あとサービスパックなどは適用されているのでしょうか。
多分ないとは思いますがPCの性能が極端に低いとかLANボードが2000とXPでは別のものを使用していて
その辺が影響しているとか?(昔、某社のLANカードを使用しているときに限りケーブルを切断してもイベ
ントが発生しないことがありました。)

投稿時間:2004/08/27(Fri) 13:21
投稿者名:しんまい
Eメール:
URL :
タイトル:
Re^4: Winsockコントロールが正常に動作しない
GODさん、ありがとうございます。遅れてすみませんでした。
> すみません。やっぱり私には理解できません。
> テキストボックスの間ってどこですか?流れるってどのように?
説明不足で申し訳ありません。
最初の時は、データがテキストボックスから次のボックスそして次へと順序よく移動していたの
ですが、事象が以前と変わり、データのパラツキは無くなり固定しました。(しかし、表示がデタラメ)
> 一定間隔で送信しているけど受信が一定間隔ではないということですか。
> 基本的にクライアント側から送信したデータをサーバー側は全て受信できているのでしょうか。
検証中です。(すべてしていたのですが、今は一部だけ。 ?..)
プログラムの一部です。

<送信側>
Private Sub Timer8_Timer()  ’タイマーは500MS
Dim dataTime(336)
Dim dataKisyu(23)
Dim dataComp(24)
Dim strInfo As String
Dim strTime
Dim strKisyu
Dim strCom
For i = 1 To 336              'テキストボックスのデータを変数に格納
dataTime(i) = Text1(i).Text
Next i
For i = 0 To 23
dataKisyu(i) = Text2(i).Text
Next i
For i = 1 To 24
dataComp(i) = Text3(i).Text
Next i
strTime = Join(dataTime, ",")   ’変数を結合
strKisyu = Join(dataKisyu, ",")
strCom = Join(dataComp, ",")
With Winsock1
    .SendData strTime
End With
With Winsock1
    .SendData strKisyu
End With
With Winsock1
    .SendData strCom
End With
END SUB

<受信側>
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strTime As String
Dim strKisyu As String
Dim strCom As String
Dim I As Integer
Dim strInfo2
Dim strInfo3
Dim strInfo4
On Error Resume Next
With Winsock1      'WINSOCKで受信
    .GetData strTime
    .GetData strKisyu
    .GetData strCom
End With
strInfo2 = Split(strTime, ",") ’結合されたデータを変数に格納
strInfo3 = Split(strKisyu, ",")
strInfo4 = Split(strCom, ",")
For I = 1 To 336
   Text1(I).Text = strInfo2(I)
Next I
For I = 0 To 23
   Text2(I).Text = strInfo3(I)
Next I
For I = 1 To 24
   Text3(I).Text = strInfo4(I)
Next I
End Sub
以上が関連すると思われるところをコピーしました。

投稿時間:2004/08/27(Fri) 15:05
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^5: Winsockコントロールが正常に動作しない
> <受信側>
> Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
>
一度に送信するデータサイズが大きいとDataArrivalイベントが複数回発生したと
思いますが、そこら辺は大丈夫なんでしょうか。

> With Winsock1      'WINSOCKで受信
>     .GetData strTime
>     .GetData strKisyu
>     .GetData strCom
> End With
>
GetDataメソッドを連続で複数回呼んでいるのですがそれぞれの変数に正しくデータが入っ
てきているのでしょうか?
見たままのイメージですとStrTimeに全てのデータが格納されてしまうように見えますが・・・。

投稿時間:2004/08/27(Fri) 20:11
投稿者名:しんまい
Eメール:
URL :
タイトル:
Re^6: Winsockコントロールが正常に動作しない
GODさん、ありがとうございます。
受信側の変数を確認してみます。
でも、現在自宅のため検証できません。来週になります。
すみません。

投稿時間:2004/09/01(Wed) 11:40
投稿者名:しんまい
Eメール:
URL :
タイトル:
解決しました
解決しました。
受信側のデータ(変数)が不安定でした。
おそらく次の部分が原因だと思います。(3回受信している)
With Winsock1      'WINSOCKで受信
     .GetData strTime
     .GetData strKisyu
     .GetData strCom
End With
それで次のように改良しました。
送信側の3つのデータを一つに結合し送信、受信側も
With Winsock1      
     .GetData strKetugo (3つのデータを一つに結合した変数)
End With
で、受信し、それを再びsplit関数で配列に戻し、テキスト・ボックスに挿入する。
以上の手順でOKになりました。
GODさん、的確なアドバイスありがとうございました。