トップページ⇒tech
21コメント6KB

簡易ブラウジャ〜 for C

■ このスレッドは過去ログ倉庫に格納されています
0001ミリリンNGNG
Webサーバーのポート80に接続して、ソースをゲットするWindowsプログラム、
作れる人いませんか? C言語で。

Winsockの使い方がサッパリわかんなくて泣きそうです。
どなたか、助けてください。m(_ _)m
0002部外者ANGNG
ブラウザーちゅうか、ダウンローダーだね。
で、ダウンローダーなら簡単に作れますが何か?
多分wgetのソースとか参考になるかと。
HTMLの解釈は面倒なので既存のコンポーネントを使うことを薦めます。
0003部外者BNGNG
>部外者A
それじゃあ、ソース載っけてみぃ。(´Д`;)
0004部外者ANGNG
やなこった。>2
この程度なら資料とテスト環境さえあれば1日で終るしなぁ。
ソースクレ厨房ウザイ
0005部外者ANGNG
×>2
○>3
あんたのようなのはウザイ>3
+単発スレ立てるな>1
部外者なのでどうでもいいか。
0006デフォルトの名無しさんNGNG
>3
ソケット作ってGET文を吐いてあとは読み込めばいいだけでしょ?
ソースっていったって検索エンジンで出てきそうなものをノッケる必要ないよ。
0007デフォルトの名無しさんNGNG
自分でソース探す努力しない人に、誰がソースを提供するのでしょうか?
あ〜勘違い。
0008部外者CNGNG
Cでソケット書くのはつなげるまでがめんどくさいんだよ。
gethostbynameしてアドレス組み立ててsocket作ってconnectしてっていう順番
は覚えてるんだけど、アドレスの組み立てが覚えられない。何かの構造体を何かに
キャストしてどっかでmemcpyして…てやつ。
で、毎回テンプレートからコピペするのでいつまでたっても覚えられない。
0009名無しさん@1周年NGNG
http://www.mars.dti.ne.jp/~torao/program/socket/program.html
0010デフォルトの名無しさんNGNG
perlでマターリとソケット書こうよ。
0011デフォルトの名無しさんNGNG
Windows環境なら、なぜwininet.dllを使わん?
0012デフォルトの名無しさんNGNG
簡易ブラジャー for Cキャップ
0013デフォルトの名無しさんNGNG
Java なら Socket クラスで一発だね。
C はめんどい。
0014デフォルトの名無しさんNGNG
>Java なら Socket クラスで一発だね。

それどころか、HttpURLConnectionクラスで一発。
0015デフォルトの名無しさんNGNG
それどころか、Jazillaつんつんで二発。
0016デフォルトの名無しさんNGNG
telnet で port 80 に接続して、ソース見たりしてたよね、昔は。
C で書くのも簡単だよ。 明日までにアップしてあげるから待つべし。
(今は、ちょっと、出先のノートなんで、テンプレートのソースが
手元にない)
001716NGNG
// cl gethtml.c wsock32.lib
#include <windows.h>
#include <stdio.h>

#define MY_BUF_SIZE 512
#define HOST_ADDRESS "216.218.139.83"
#define HTTP_PORT 80
#define REQUEST_STRING "GET /test/read.cgi?bbs=tech&key=982340516 HTTP/1.0\nHOST: 0.0.0.0\n\n"

void main( int argc, char **argv )
{
SOCKET sock = INVALID_SOCKET;
char buf[MY_BUF_SIZE];
WSADATA wsaData;
struct sockaddr_in host;
int n, ret;

if ( WSAStartup(0x0002,&wsaData) == SOCKET_ERROR ) {
fprintf(stderr,"WSAStartup failed (%d)\n", WSAGetLastError());
WSACleanup();
exit(1);
}
if ( (sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
fprintf(stderr, "socket() failed (%d)\n", WSAGetLastError());
WSACleanup();
exit(1);
}
memset( &host, 0, sizeof(host) );
host.sin_family = AF_INET;
host.sin_addr.s_addr = inet_addr( HOST_ADDRESS );
host.sin_port = htons( HTTP_PORT );
if ( connect(sock, (struct sockaddr*)&host, sizeof(host)) != SOCKET_ERROR) {
send( sock, REQUEST_STRING, strlen(REQUEST_STRING)+1, 0);
do {
if ( (ret = recv( sock, buf, MY_BUF_SIZE, 0)) > 0 )
for ( n = 0; n < ret; n++ )
putchar( buf[n] );
} while ( ret > 0 );
} else {
fprintf(stderr,"connect() failed (%d)\n",WSAGetLastError());
}
closesocket( sock );
WSACleanup();
}
001816NGNG
connect/send/recv のエラー処理は端折ってるからね。
現実には、Async な処理しないと使い物にならないんだけど、
「さっぱり分からない」という人のレベルに合わせてるよ。
0019名無しさん@1周年NGNG
>>16
今でもやっているぞ。telnet でポート 80 叩くの。
それよか 1 はどこ行った?
0020デフォルトの名無しさんNGNG
ブラジャー&hearts;ラブ!
0021デフォルトの名無しさんNGNG
http://www.nakka.com/lib/inet/
■ このスレッドは過去ログ倉庫に格納されています