• ベストアンサー

Winsockの使い方

Winsockを使用して、ネットワーク上でデータのやり取りを考えています。 フォーム上でのsendData,DataArrivalは上手くいきました。そこで、今度は標準モジュール上でsendDataを記述してできないかを試しているのですが、「メソッド失敗」で上手くいきません。 もし分かる方がいましたら、是非おしえてください。

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

  • ベストアンサー
  • nta
  • ベストアンサー率78% (1525/1942)
回答No.1

Winsock.ocxはform上でなければ動作させることはできないようにライセンスコントロールされているそうです。裏技はあるようですが、こればかりはご自分でお調べください。

参考URL:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q313984

その他の回答 (1)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

標準モジュールに書くのであれば、ソックもパラで渡してあげたら? '標準モジュールサンプル Public Sub SendMsg(inSock As Winsock, inValue As STRING)   With inSock     If (.State = (sckConnected)) Then       .SendData inValue     End If   End With End Sub

関連するQ&A

  • winsockというオブジェクト

    VB6でwinsockというオブジェクトを使っていて、 tcpClient.Protocol tcpClient.LocalPort tcpClient.RemoteHost tcpClient.RemotePort というコマンドを使うのですが、 これらを記述したコマンドを標準モジュールに記述すると動作しません。 通常のフォームに記述したら動作するのですが、 他のソフトでも使うので標準モジュールに記述したいです。 このようなことは出来ますか?

  • 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で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

  • Access2003で「Winsock」を使用出来ない

    Access2003のフォームに「Winsock」を貼り付けて、TCP/IPでデータのやりとりを行っていたのですが、今日Accessを立ち上げてそのフォームを開くと「このコントロールにはオブジャクトがありません」というエラー表示となり、フォームの「Winsock」アイコンも白くなっていました。その白くなった「Winsock」アイコンを削除して再度ActiveXコントロールの挿入で「Winsock」を選んだのですが、「このActiveXコントロールはサポートされていません。」というメッセージが表示されフォームに挿入出来ません。 パソコンの環境ですが、OSはXp、Access2003、Winsockは6.0(SP4)です。 ちなみにこのWinsockが動かないMDBファイルを別のパソコンにコピーし、開くと正常にWinsockが動作します。 Access自体に何らかの障害が発生しているのでしょうか? 非常に困っています、どなたかお助け下さい。

  • 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を使ってのプリンタ接続・データ送信

    現在LANで接続されたプリンタに文字列を印字させるプログラムを作成しているのですが、プリンタ側のIPアドレス、使用するポート(今回は1024という指定があったのでそれに設定)を設定し、印字処理をはしらせたのですが、そこでエラーが発生してしまいます。簡略化していますが、プログラムは Private sckWinsock As Winsock Set sckWinsock = Winsock1 sckWinsock.Protocol = sckTCPProtocol sckWinsock.RemoteHost = "192.168.0.***" sckWinsock.RemotePort = 1024 sckWinsock.LocalPort = 0 sckWinsock.Connect strData = "テスト印字" sckWinsock.SendData strData sckWinsock.Close エラーは sckWinsock.SendData strData ここで発生し、『指定したトランザクションまたは要求のプロトコルまたは接続状態に問題があります。』とでます。 PINGはちゃんと通りますし、プリンタ設定にあるテスト印字は問題なく機能するので、プリンタとの接続がまずいとは思えないのですが・・・ WinSockを使うのは初めてなので勝手がわからなく苦戦中です どなたかわかる方、お返事お待ちしています

  • VBのフォームモジュールと標準モジュールの使い分け

    VBのフォームモジュールと標準モジュールの使い分けが今一つわかっていません。 フォームモジュールとは、フォーム(画面)上で起こったイベント(例えば、ボタンをクリックした時とか、ユーザーが行を選択したりだとか)の処理を、記述するところと解釈しています。 標準モジュールは、フォームが2つ以上あって、その2つが共通する処理(関数)などを、記述したり、フォームが1つでも、同じ処理を繰り返す場合、その処理を標準モジュールに書いたり・・・・という解釈をしています。 あってますでしょうか? フォームが一つしかない場合、もしくは2つあっても、あまり共通する処理がない場合、なんかは標準モジュールはあまり使わないのでしょうか? それとも、フォームが1つとかでも、今後のメンテの事など考慮して、標準モジュールを作ってそこにグローバル変数なんかで処理を書いた方がよいのでしょうか? どなたか、教えてくださいませんか? いろいろBBSなどで見てみるんですが、いろいろ書いてあって、どれが理想か わかりません。よろしくお願いいたします。

  • フォームのイベントを標準モジュールから呼び出す

    フォームのイベントを標準モジュールから呼び出す事は出来ないのでしょうか? ちなみにアクセスです。 例えば、 Private Sub Form_Load() MsgBox "test" End Sub というのはフォームを開いたときにしか発生しないですよね。 でもフォームを開いている状態でForm_Loadと全く同じ事をしてほしい時は どうすればいいですか? 標準モジュールで Sub a() Call Form_フォーム1.Form_Load End Sub としてみましたが、メソッドまたはデータ メンバが見つかりません。 (Error 461)になりました。 MsgBox "test" だけなら、 Sub a() MsgBox "test" End Sub にすりゃいいじゃん!って思われがちですが、 実際はForm_Loadイベントにはたくさんのコードが書かれています。 標準モジュールからイベントの呼び出しを教えてください。

  • Access VBA標準モジュールについてです。

    Access VBA標準モジュールについてです。 現在、仕事上必要にかられAccessVBAを勉強中の初心者です。初歩的な質問で申し訳ありませんが、ご存知の方教えて下さい。 フォーム上のコマンドボタンを押した時に標準モジュールを作動させたいのですが、そんな方法はありますか?【クラスモジュールについての本は沢山あって何とか理解できつつありますが、標準モジュールに関しての記述があまり無い気がします。】 宜しくお願いします。

  • WINSOCKのWSACleanupについて

    WINSOCKのWSACleanupについて質問です。 現在、ソケット情報を3つ保有しているソケット通信プログラムがあります。 そのうちの1つのソケットを使用してデータの送受信を行っている際に、何らかのエラーが発生した場合、closesocketを行った後、WSACleanupを使用すると、 エラーのあったソケット情報だけでなく、 他の2つのソケット情報まで強制的に破棄してしまうのでしょうか? それとも、WSACleanupでこのソケット情報を破棄みたいな指定はできるのでしょうか? こんな状況な場合は、オープン時にソケット情報の 初期化を行っていれば、WSACleanupは行わなくても 大丈夫でしょうか? 何か知識をお持ちの方がいらっしゃいましたら、 助言、宜しくお願いいたします。