• ベストアンサー

winsock 送受信

VB6を使っていますが、詳しくないので質問させていただきます。 とりあえず同じPCでwinsockを用いてサーバとクライアントを接続させてデータを送受信するプログラムをつくっています。 データの送受信senddataとDataArrivalのところで悩んでいるのですが、senddataを数箇所用いていて、送ったデータは GetData 変数 により全て同じ変数にされてしまいます。 サーバでtemp=10とi=1のデータを送ると、クライアントでもそのtemp=10とi=1のデータ両方が使いたいわけですが、どうすればいいでしょうか?

  • force1
  • お礼率55% (713/1288)

質問者が選んだベストアンサー

  • ベストアンサー
  • nac03056
  • ベストアンサー率48% (203/419)
回答No.1

送るタイミングがわかりませんが、方法としては、temp=10 と i=1 を送る場合に、同時に送るようなデータであれば 1001 というtempとiを組み合わせた形式で送信して、左2文字がtempで右2文字がiと送信時のフォーマットを決めておけばいいように思います。また、両方の送信のタイミングが別々の場合は t10 とか i1 のような組み合わせで送信して、変数で受け取ったときにif文とleft関数で左一文字を見てそれぞれの変数に割り振るような方法がいいかと思います。 いかがでしょう。

関連するQ&A

  • Winsock 受信について

    Winsockをサーバとクライアントで動かして送受信についてです。 サーバでSendDataで送信、クライアントでGetDataの所です。 サーバーでSendDataを数回送信するとクライアントのGetDataではある程度まとめて受信します。 (1)サーバ側で送信    Winsock.SendData "aaaaa"    Winsock.SendData "bbbbb"    Winsock.SendData "ccccc"    Winsock.SendData "ddddd" (2)クライアントで受信    Winsock.GetData xyz (1)のように送信した場合、(2)のxyzは    ・aaaaabbbbbcc    ・cccddddd のように数回に分けて受信されます。 希望としましては、1データ送信に対して1データ受信が望ましいのですが。 実際のデータには全角はある為、このような希望となりました。 もしかして、不可能なのでしょうか。 わかる方、教えて下さい。

  • Winsockで1460Byte以降のデータが細切れに

    度々お世話になってます。 VB6.0、Winsockで、チャットプログラムを作っているのですが・・・ 20文字のヘッダーで、処理が識別されるプログラムを作っているんですが、1460バイトを超えるデータが途中で切れて、ヘッダー無しの状態になって、処理を識別できないんですが・・・。 1460という数字は、DataArrivalのbytesTotalで調べたのですが、制御コード(のバイト数)とか、決まっているのでしょうか? Send メソッドで通信する場合、一度に送るサイズを1460バイトにしたいのですが、サーバ←→クライアント間で、自力で作るしかないですかね・・・? データを分割して、配列 myArray(partNum) にする。 先ほどと同じ処理のACKをクライアントが受信したら、partNumを+1して、データを送信。 client.SendData <処理A> 1:○○ server.GetData <A> 1:○○ server.SendData <A> 1:ACK client.SendData <A> 2:●● ・ ・ ・ client.SendData <A> 9999:End 方向性はあってますかね? なにか、楽な方法ありませんか?(汗) cf. http://bbs.wince.ne.jp/ch1/mqbbs.cgi?MODE=MSG&NUM=5156&FILE=bbs.log.51 http://bbs.wince.ne.jp/ch1/mqbbs.cgi?&FILE=bbs.log.51&MODE=MSG&NUM=5161

  • Winsockを利用したファイルの送受信について

    こんにちは。現在、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

  • WinsockでwebにPOSTした後の処理について

    Winsockコントロールを使って掲示板などにPOSTでデータを送信する際、ヘッダー部分で Content-Length: ~~~ も送信してるのですが、 Content-Length:の値分のDATA?を送らないとサーバー側がずっと待機する状態になると思うのですが、 これはWinsockのCloseメソッドを使えばサーバーの待機状態が解除されますか? また、SendDataの途中でプログラムを終了する場合もCloseメソッドでいきなり閉じても大丈夫でしょうか? 自分が書いた該当部分のソースは下記の通りです。 Dim strHead As String 'ヘッダー Dim strData As String 'データ 'いろいろな処理  strHead=strHead & vbCrLf & "Content-Length: " & LenB(StrConv(strData, vbFromUnicode)) & vbCrLf & vbCrLf  'strHeadとstrDataにはきちんとデータが入ってる  Winsock1.SendData strHead & strData End Sub そして Winsock1_DataArrivalプロシージャーに Dim strBuf As String  Winsock1.GetData strBuf  If Instr(1,strBuf,"</HTML)") > 0 Then   Sleep 1000:DoEvents   Winsock1.Close  End If Form_QueryUnloadプロシージャーに  Sleep 1000:DoEvents  Winsock1.Close End Sub

  • VB6.0 Winsockについての質問です。

    VB6.0 Winsockについての質問です。 はじめまして。 現在、VB6.0を使用してTCP通信にてテキストデータを送るプログラムを作成しています。 機能としては全て完成しているのですが、現在再接続ができないじょうたいです。 PC上にサーバプログラムとクライアントプログラムを立ち上げます。 localport は 0 として設定しており、 host は、localhostとしています。 remortportは5000を設定しております。 現段階で発生している問題として、 クライアント側にてConnectイベントをさせ、 サーバ側にて、ConnectionRequestイベントが発生します。 クライアント側にて、Closeイベントは発生させ、 サーバー側も切断を確認します。 この状態でクライアント側から再度Connectイベントを発生させても サーバ側にてConnectionRequestイベントが発生しません。 サーバ側のプログラム一度終了させ、もう一度起動させると また、接続が可能になります。 もう、2日以上悩んでいるのですが、、、解決できません。 どなたか、詳しい方がいらっしゃいましたらご教授お願いします。

  • VB(Winsock)で。。。

    VB6.0を使っての開発です。 うまく説明できませんが、Winsockを使用して、複数のコネクトでデータの送受信を行おうと思っています。 その場合、サーバー側に時間のかかるデータ処理を要求したら、別のコネクトからの処理要求があった場合、両方の処理を同時(平行して)行えますか? 現在は、要求があるごとにWinsockのインデックス値を加算して処理をしていますが、コントロールを複数貼り付けて作成しないといけませんでしょうか? 説明下手でもうしわけありませんが、よろしくお願いします。

  • winsockについて

    winsock、非同期モードでTCP/IP通信を行うようなプログラムを作成しています。 通常の同期モードでのプログラムは完成させることができました。 そこで、クライアント側を非同期モードにし、受信バッファにデータが入ったら受信するというようなプログラムにしたのですが、どうもうまく動作してくれません。 やはりサーバー側も非同期モードにしなければならないのですか?? どなたかご教授お願いします。

  • winsockを使った通信方法

    winsockを使った通信でサーバークライアント方式の通信プログラムで クライアントプログラムがサーバープログラムに接続して、 クライアントプログラムで移動あった時のみ サーバーに現在の位置情報を送信し、サーバープログラムが他の参加者に 送信するという通信方式で通信を行っています。 この方法だと接続者が複数人の場合、一人だけ移動していると普通に通信でき位置情報の更新 も出来るのですが、 同時に移動が起こると、モデルが勝手に移動してクライアントプログラムに触れなくなってしまいます。 これを避けるにはどうしたらいいでしょうか?

  • VB6のwinsockでconnectできない

    socketでconnectすると、sckclosingとなって通信できない。 機械との通信プログラムをつくるため、インターネットから以下のようなサンプルを取って、同一コンピュータ、または異なるコンピュータ間で通信しようとした(一部省略、改変)が、stateが8となってしまいます。socketを使うのは初めてで、皆目見当がつきません。よろしくお願いします。 サーバー側 Private Sub Form_Load() Winsock1.LocalPort = 1001 Winsock1.Listen -------- End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim dat As String, ans As String Dim n As Integer Winsock1.GetData dat Text1.Text = dat Winsock1.SendData "わかりません" End Sub Private Sub Form_Load() Text1.Text = "abc" (正しいコンピュータ名を入れた) Winsock1.Close LabCon.Caption = "Closed": LabCon.BackColor = vbWhite End Sub クライアント側 Private Sub Command1_Click() Winsock1.Close Winsock1.RemoteHost = Text1.Text Winsock1.RemotePort = 1001 'ポート番号設定 Winsock1.Connect Do While (Winsock1.State <> sckConnected) LabCon.Caption = Winsock1.State DoEvents Loop End Sub クライアントでcommand1ボタンをクリックすると最初はstateが0、ループに入ると8となって出られません。WindowsXP、Vista共に同じ結果でした。

  • winsock のrecvデータの終わりを知るには

    Winsockの非同期プログラムで サーバーからクライアントへ,100MB前後のデータを送るプログラムを書いています. サーバーでsend()して,クライアントのcase FD_READ のイベント応答としてrecv()を繰り返すプログラムです. サイズが大きいので何度もrecev()して,データを結合していくことになりますが, 送信データの最後を知るエレガントな方法がないかと思っています. すべてが送り終わったら空send()をして,ゼロサイズのデータを送ることができればよいのですが. よろしくお願いします.