WinSockを使ってのプリンタ接続・データ送信

このQ&Aのポイント
  • LANで接続されたプリンタに文字列を印字させるためのプログラムを作成していますが、エラーが発生してしまいます。
  • プリンタ側のIPアドレスとポートを設定して印字処理を行いたいが、指定したトランザクションまたは要求のプロトコルまたは接続状態に問題があるというエラーが出ています。
  • プリンタとの接続がうまく行われていない可能性があるため、WinSockを使うのは初めてで苦戦中です。
回答を見る
  • ベストアンサー

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を使うのは初めてなので勝手がわからなく苦戦中です どなたかわかる方、お返事お待ちしています

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

  • ベストアンサー
  • momoturbo
  • ベストアンサー率55% (49/88)
回答No.3

APIを使用するとできます。 ただ、使い慣れるまでちょっと大変かも・・ ちょっと検索したら、以下のところにサンプルが ありました。 winsock api なんかで検索してみてください。 ほとんどがC言語用にかかれているものばかりですけど。 がんばってください。

参考URL:
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9802/winsock/
BlackCat_1106
質問者

お礼

参考URL先のサンプルを参考にしたらうまくいけました momoturboさん、最後までありがとうございました

その他の回答 (2)

  • momoturbo
  • ベストアンサー率55% (49/88)
回答No.2

>Connectが開始されても一向にイベントが発生せず、原因もわからなかったので省いていました。 TCPの場合Connectのイベントが発生しないということは、 ’つながっていない’ってことです。 TCPの場合、電話のような通信をイメージしてください。 電話をかける->Connectメソット 相手が電話に出る->Connectイベント 話す->SendData この例でいうと相手が受話器を取っていないのに しゃべり始めてるってことです。 UDPの場合は無線みたいな物で、相手が聞いてようがいまいが 関係なくしゃべるということになります。 通信の仕様がTCP・UDPによりプログラムも変わります。 MSDN(ヘルプ)のWinsockコントロールのところを みてください。 簡単な、サンプルものってますよ。 VB6で説明しています

BlackCat_1106
質問者

補足

momoturboさん、再度ご返答ありがとうございます 電話を例えての説明すごくわかりやすかったです 理解できたのは良いのですが、色々と調べているとWinSockコントロールが使用できないことがわかりました。(VBは6.0です) ですので、コントロールを使わずにソケット通信ができれば良いとは思っているのですが、何かご存知ないでしょうか?当初の質問とは違いますが、よろしくお願いします

  • momoturbo
  • ベストアンサー率55% (49/88)
回答No.1

思いつくことを書きます。 ・sckWinsock.ConnectのあとすぐにSendDataを書いても だめだと思います。Winsock1_Connectのイベントのあとに 行ってみてください。できればコマンドボタンのクリック など・・ ・印刷のプロトコルはTCPですか? UDPではないのですか? VB6の場合

BlackCat_1106
質問者

補足

momoturboさん、返答ありがとうございます。 まずWinsock1.Connectのイベント後にSendDataを書いたほうがよろしいとのことですが、前に試していたときはConnectが開始されても一向にイベントが発生せず、原因もわからなかったので省いていました。 記述していたときは以下のとおりにしていました (While文でループを繰り返すだけでした) blnConnect = False Winsock1.Connect While blnConnect = False Then DoEvent Wend Praivate Sub Winsock_Connect() blnConnect = True End Sub それとプロトコルですが、UDPのほうが印刷には適していますか。どちらがよいのかわからず適当にTCPのほうにしていたもので・・・ UDPで挑戦してみます。 できればさらなるアドバイスお願いします (情報が少なすぎなら追記いたします)

関連するQ&A

  • Winsockで、localhostに接続時、10061エラー、コンピューター名ならOk

    VB6.0(SP5)で、TCP/IPの通信を作成しています 開発環境は、Windows2000(SP4) 実行環境は、WindowsXP Home(sp2)です Winsockコントロールに以下の値を設定していますが接続時にエラー:WSAECONNREFUSED 10061 Connection refusedを返します .LocalPort = 0 .RemoteHost = "localhost" .RemotePort = 2010 .Connect (.RemoteHost = "127.0.0.1"でも同じです) しかし、 .RemoteHost = "192.168.0.110" 自身のIPアドレス .RemoteHost = "COMP01" 自身のコンピューター名 を指定した場合エラーとなりません 何かアドバイスを頂ければお願いします

  • Winsockのオブジェクトエラー

    こんにちは。EXCEL2000・VBAで、Winsockの使用を考えています。 以下のソースコードを入力して、実行してもオブジェクトが見つかりませんという、エラーが出力されてしまいます。 また、Winsockをアクティブにしようと、 User FormにWinsockのアイコンを追加しようとしても 「サブジェクトは指定された操作に対して信頼されません」 という注意書きがでてしまって、追加できません。 なぜ、このようになるのか、教えていただけますか? よろしくお願いします。 Private Sub CommandButton1_Click() Winsock1.RemoteHost "www.yahoo.co.jp" Winsock1.RemotePort 80 Winsock1.Connect End Sub Private Sub CommandButton2_Click() Winsock1.SendData = TextBox1.Value End Sub Private Sub CommandButton3_Click() Winsock1.Close End Sub

  • winsockというオブジェクト

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

  • 現在WINSOCKコントロールを用いて通信プログラムを作成しています

    現在WINSOCKコントロールを用いて通信プログラムを作成しています サーバ側の設定が IP:192.168.1.10 Port:10000のとき、 Winsock.state = 7(Listen状態) クライアント側で Winsock.Close Winsock.RemoteHost = "192.168.1.10" Winsock.RemotePort = 10000 Winsock.Connect で実行したときにエラー10061で返ってきます。 NETSTAT -anで他にこのポートを使用ものは有りませんでした どのようにすればエラーが回避できますでしょうか?

  • VB.NetのWinsockについて

    VB6.0の時は LocalPortとRemotePortを別々に設定できましたが VB.Netの場合LocalPortとRemotePortを別々に設定するのはどうすればよいのえしょうか? 'リモートホストと接続します。 objTcpClient = New Net.Sockets.TcpClient() 'objTcpClient.Connect("localhost", intPortNo) objTcpClient.Connect("127.0.0.1",5000) '<<リモートポート                          '<<ローカルはどう設定すればよいの? へんな質問ですがよろしくお願いいたします。

  • Winsockについて

    OS :WindowsXP 開発言語 :VC++ Winsock :2.2 現在、Winsockプログラムにて下記のようなテストをしています。 接続 ⇒ データ送信(正常) ⇒ LANケーブル抜く ⇒ データ送信(当然エラー) ⇒ LANケーブル挿す ⇒ データ送信 ・・・ ←ここでもエラーが発生してしまいます。 Winsockの通信は一度切れてしまうと最初から接続しなおさないと駄目なのでしょうか。

  • 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の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 送受信

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

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

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