• 締切済み

ソケット通信

いつもお世話になっております。 私は最近、指定したウェブページのソースからリンク先のURLをリストとして書き出すツールを作ろうと思っているのですが、ウェブページのソースを所得する方法がわかりません。 某SNSで質問してみたところ、ソケット通信でhtmlデータを受信し、strstr()等で検索すれば良いとのことで調べては見たものの、通信関係は全くの無知なので理解し難い部分が多々ありました。 ですからここで質問させていただいたのですが、具体的にどのようなプログラムを書けばhtmlソースを受信することができるのでしょうか?

みんなの回答

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

単純にソケット通信といっても、 環境によって多少違いがあります。 お使いの環境を教えてください。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★追記。 ・InternetReadFile() API関数を利用するには  (1)『wininet.h』ヘッダをインクルードします。  (2)『WinInet.Lib』ライブラリをインポートします。  ※windows.h をインクルードしていれば wininet.h はインクルードしなくても良い。 ・以上。

参考URL:
http://msdn2.microsoft.com/En-US/library/aa385473.aspx
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★アドバイス ・InternetReadFile() API関数で HTML ソースを取得できます。  この関数の使用例は次の過去質問を参考にして下さい。  http://oshiete1.goo.ne.jp/qa2630445.html→『InternetReadFileで大きいファイルが読み取れない』  ↑  ここに載せています。→回答者 No.2、No.3 を参考に。 ・なお、ファイルへ保存しなくてもメモリ内に HTML ソースを取得してメモリ上で URL アドレスを  抽出するようにしても良いでしょう。ただし、巨大な HTML ソース(1MB以上)の場合は別の方法で  分割取得します。このときは一時ファイルに保存して、そのファイルを処理するなどして下さい。 その他: ・前回の質問『URL抽出』→http://oshiete1.goo.ne.jp/qa3097203.html  の補足アドバイスをします。 ・HTML ソースの中には改行が全くないタイプが存在するため、前回紹介した簡単なサンプルでは  一部、正常に URL を抽出できません。このタイプにも対応するには HTML ソースからタグを  きちんと解読する必要があります。解読といっても文字列の処理ですので『<』~『>』文字の  間がタグの記述だと判断して『A』→『HREF=』文字列を StrStrI() 関数で見つけます。  その後に『=』文字に続く文字列が URL アドレスなのでダブルクォーテーションなどの文字まで  を抽出します。 ・なお、StrStrI() 関数は C言語の strstr() と似た関数ですが、大文字と小文字を区別無く検索  できる便利な関数です。この API 関数を利用するには  (1)#include <shlwapi.h> をインクルードする  (2)shlwapi.lib をインポートする  ↑  これで使用できます。  StrStrI() 関数については→http://nienie.com/~masapico/api_StrStrI.html を参考に。 ・まずは HTML ソースを一時ファイルに保存して、そのファイルから URL アドレスを抽出してみて下さい。 ・以上。

参考URL:
http://oshiete1.goo.ne.jp/qa2630445.html

関連するQ&A

  • VC++ 6.0 のソケット通信について

    VC++6.0にてソケット通信プログラムを作成中(学習中)なのですが 以下のようなソケットのやり取りを想定しています。 A→B→C A←B←C 分かりづらいかもしれませんが、A,B,C三つのプログラムがあり まず、AはBに向けて電文を送信、Bはそれを受信し、Cに電文を送信 Cはそれに対してBへ電文を送信、BはCからの電文を受信しAへ電文を送信 こんな感じになっています。いうなればA,C間の中継器のような役割をBに持たせたいのです。 http://blog.livedoor.jp/akf0/archives/51585502.html ここのソースなどを参考にしてBのプログラムを組んでいるのですが サーバとクライアントでソースが分かれています。 Bはサーバもクライアントも兼ねるような仕様なのですが、この場合に使用するソケットは (1)Aからの受信を行う(待つ)ソケット (2)Cへ送信を行うソケット (3)Cからの受信を行う(待つ)ソケット (4)Aへ送信を行うソケット の4つのソケットが必要になるのでしょうか? ソケットの仕組みがうまく理解できていないので頓珍漢な質問かもしれませんが 回答よろしくお願いします。

  • JAVAでのソケット通信について

    ソケット通信について、webページとJAVAのAPIを見ながら勉強していまが、 BufferedInputStreamクラスとDataInputStreamクラスがありました。 この2つのクラスはどのような違いがあるのでしょう?? また、それらのクラスにはavailable() というメソッドがありました。 「ブロックせずに入力ストリームから読み込むことができるバイト数を返します。」と書かれていますが、どういう意味なのでしょう??ブロックってどういうことなのでしょうか?? ご指導のほど、よろしくお願いいたします。

  • PHPのソケット通信について

    PHPにおいてのソケット通信についての質問です。マイページ機能をもたせたシステムの構築をしています。 マイページで認証を行い、そのユーザのユーザIDと乱数を一緒にデータベースに認証成功時に格納しています。 そして、マイページから別サーバへリンクしたときにPOSTしてこのユーザIDと乱数を送ります。 ユーザがマイページを経由して別サーバにアクセスしてきているかどうかということを確認するために、別サーバからこのマイページを運用するサーバに対してユーザIDと乱数をソケット通信によって送り、データベースに登録されているかどうかを別サーバ上のページを遷移するたびに確認したいのです。 データベースに登録されているユーザなら、マイぺージを経由してアクセスしてきているということでページを表示させて、登録されていないなら、マイページのログインページを表示させるようにしたいです。 Socket通信について調べてみたもののわかりにくいものが多くて、理解しかねますので、よろしくお願いします。 サンプルのコードをのせていただくと、なお嬉しいです。 開発環境は OS windows vista 言語 PHP5 サーバ Apache DBMS MYSQL です。 よろしくお願いします。

    • 締切済み
    • PHP
  • ソケット通信のシミュレータツールについて

    ソケット通信を使用したクライアント機能のテストを行うために、サーバ側を シミュレートするツールを探しています。 必要なツールの条件は、 『クライアント側から送信された電文をそのままの内容で自動で返す』 シミュレータです。 クライアントの送信データの中で動的にインクリメントしている番号があり、 サーバ側ではその番号をそのまま返す必要があるためです。 クライアントからの電文送信量も多いため、ツールの機能として、受信したデータに 対して折り返しのデータを事前に指定しておくというものではなく、 単純に同一データを自動で折り返すというものが望ましいのですが・・・。 どなたか良いツールをご存知ないでしょうか?

  • C#でソケット通信についての質問

    C#でソケット通信についての質問 ttp://www.geocities.jp/hatanero/socket2.html このサイトのプログラムを使って 複数のPCを繋いでみようかと思います。 通信方法はなんとなくですがわかりました。 そこで、自分が使っているPCのマウスカーソルの座標を 繋いでいる他のPCに送信し、受信する。 というのをやろうとしました。 上のコードを使って送信ボタンを押せばマウスカーソルの座標を送信&受信は簡単にできました。 (ただ単にTextBox内に書かれた文字を送信するという所を変えただけですが) そこで、ボタンを押すという作業を省きたいのです わかりやすく書けるか分かりませんが 「常にそのイベント(?)が動作している。」 という感じです。 SDKとかMFCとかよくわかりませんが 詳しいサイトとか教えて頂ければ嬉しいです!!

  • VB.NETでソケット通信を実装しようとしています。

    VB.NETでソケット通信を実装しようとしています。 実装しようとするのは送信側です。 カンマ区切りのパラメータを送り、 受信側から戻りパラメータとしてカンマ区切りのデータを受け取るものです。 以下を参考としているのですが、 特にパラメータの設定の部分 カンマ区切りのデータをどこで設定すべきかわからない状況です。 http://dobon.net/vb/dotnet/internet/downloadusesocket.html サンプルソース等でご指摘いただけるとうれしいです。 初心者です。申し訳ございません。 ご回答お願いします。

  • ソケットを使った「非同期」通信について

    はじめまして。VB.NETで質問があります。内容は、(スレッドと)ソケットを使った「非同期」通信についてです。 マイクロソフトのページからサンプルコードをコピーして、二行のプロジェクトを作成し以下の二つのコードを追加したんですけど…(ipの指定は、GetHostNameを使っています。) プロジェクト1:非同期クライアント ソケットの例 Button1_Click AsynchronousClient.Main() プロジェクト2:非同期サーバー ソケットの例 Button1_Click AsynchronousSocketListener.Main() マイクロソフトのページ(ソケットのコード例) → http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconsocketcodeexamples.asp プロジェクト2のフォームが固まってしまいます。 (Waiting for a connection...を出力ウィンドウに表示したままになってしまいます。) 暫定策として、Shellを使って、サーバー(プロジェクト2のexe)を起動してみたのでが、それでも固まってしまいました。 3日間ぐらいかけてネットで検索とMSDN見たけど、分かりませんでした。キーワードは、以下の通り… 「マイクロソフト .NET スレッド フリーズ サンプルコード 非同期 マルチ select -sql」 Select フックなどの言葉も関係があるようなのですがよく分かりません。 ただ、フォーム上のボタンが押せるようになれば、解決です。 なにかキーワードだけでも、教えてください。お願いします。

  • Visual C++ 2005でソケット通信をおこなう際のプロジェクトファイルの設定を教えてください。

    Visual C++ 2005でWindowsソケット通信を行うプロジェクトを 新規作成するときに、プリケーションウィザードの高度な機能 タブのWindows ソケットのチェックを入れる必要がありますが、 このチェックを入れずに作ってしまったプロジェクトに 後からソケット通信を行う設定を追加することは可能でしょうか。 プロジェクトのプロパティページを確認しましたが、それらしい 設定は見当たりませんでした。 プロジェクトを新規作成し直したいとのですが、かなり複雑に なっており、可能であれば、このまま設定を追加することで、 解決できればと思い、質問させていただきました。 ご回答よろしくお願いします

  • 10年前のシステム ソケット通信 モニタ出来ない

    10数年前に作られたUNIXプリをWindowsに置き換えようとしています。 このシステムでは上位系のオフコンとソケット通信をしています。 ドキュメントがほとんど無い状態。 通信部の確認の為、接続テスト用プログラムを作りましたがうまくい きませんでした。 どんな内容が流れているのか元のUNIX-オフコン環境に別のPCにパケ ットモニタをつなぎ何が流れてるのか見ようとしたのですが、なぜか 何も見えません。 <質問> ・パケットモニタに何も現れないのは使い方がまずいだけでしょうか?  何か情報があれば教えてください。 ・その他、何でも情報あればお願いします。 <既設>オフコン-UNIX間通信処理  通信タスクは2本 ・タスクAはクライアント ・タスクBはサーバ ・まずタスクAがコネクトし、ある伝文を送るとオフコン側から  タスクBが待つポートへつなぎに来る。 <その他> ・今回オフコン側はノータッチです。 ・断片的に見つかった資料には、タスクA,Bそれぞれに  送信用、受信用として異なるポート番号が書いてありましたが、  ソースには当然ポート番号はタスクA,Bそれぞれ一つしか書い  てませんでしたのでドキュメントは間違いと判断してます ・パケットモニタはsqueezerを使用  今回の試験用にPC同士で作った通信はモニタ可  モニタ用のPCをつなぐ際はスイッチングでないHUB使用

  • ソケット通信の受信処理について(マルチスレッド)

    今私はVisual Studio2010 C++で ソケット通信のプログラムをしているのですが、 クライアントから送ってくる文字をうまく受信できません。 接続は出来ています。 _beginthreadexでスレッドを作っています。 以下が受信の処理のスレッドになっています。 unsigned int __stdcall ThSend(void* pArg) {     CSocket_ServerDlg* pDlg = (CSocket_ServerDlg*)pArg; while(1){       char buf[256]; /* 受信するバッファ */ int buf_len; /* 受信したバイト数 */ buf_len = recv(pDlg->m_NewSoc,buf , RECVSIZE - 1, 0); if (buf_len != SOCKET_ERROR ){       buf[buf_len] = '\0'; /* 受信したバッファの後ろにNULLを付加する */       }       pDlg->m_xvEditResult += _T("Recv : ");       pDlg->m_xvEditResult += buf;       pDlg->m_xvEditResult += _T("\r\n"); } return 0; } "m_"はメンバ変数です。 以下がスレッド作成のソースになっています HANDLE hForth; unsigned int nForthID; hForth = (HANDLE)_beginthreadex(NULL, 0, ThSend , this, 0, &nForthID ); なぜ受信できないのか分からない状態です。 ではよろしくお願いします