トップページ⇒tech
1001コメント317KB

ネットワークプログラミング相談室 Port5

■ このスレッドは過去ログ倉庫に格納されています
0001UnknownNGNG
主にソケットに関しての質疑応答スレです。

Programming UNIX Socket FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html

Winsock Programmer's FAQ
http://tangentsoft.net/wskfaq/

過去スレ:
ネットワークプログラミング相談室
 http://pc.2ch.net/tech/kako/970/970344582.html
ネットワークプログラミング相談室 Port2
 http://pc.2ch.net/tech/kako/1006/10062/1006258198.html
ネットワークプログラミング相談室 Port3
 http://pc3.2ch.net/test/read.cgi/tech/1023359282/
ネットワークプログラミング相談室 Port4
 http://pc3.2ch.net/test/read.cgi/tech/1034236536/
0552デフォルトの名無しさんNGNG
>>551
IPアドレスが複数ある時の問題であって
NICの数は関係ない
0553デフォルトの名無しさんNGNG
>>552
なるほど。
レスありがとです。
0554デフォルトの名無しさんNGNG
>>551
サーバー側はlistenするポート(とアドレス)を設定せにゃならんから、必須だって事はわかるよね?
クライアント側でも使用するポートやアドレスを自分で決めたい場合があるんだよ。

例えば、サーバーが特権ポートから接続されることを要求してるとか、
サーバーに対して複数の経路から接続できる場合に、どの経路を使うかを自分で決めたいとか。

bind(2)せずにconnect(2)した場合に適当な設定(INADDR_ANY、空いてる非特権ポート)を
使わずにエラーとするのはsocketの仕様としか言いようが無い。
ようするに、お行儀よくbind(2)しろってこった。
0555デフォルトの名無しさんNGNG
bindってDNSデーモンのことだと思ってしまった
0556デフォルトの名無しさんNGNG
バークレイリケットでマルチキャストのプログラムって
作れます?
0557デフォルトの名無しさんNGNG
>>555 このスレでソレはナイだろ(w
0558デフォルトの名無しさんNGNG
MSNメッセンジャースレあるじゃん。
あれ見て、なかなか面白そうだなぁと思って、
Linuxのコンソールで動くメッセクローンを作り始めてみた。

かなりいい勉強になるし、
やっぱりプログラムって楽しいね。

ところで、Cである文字列からIPアドレスを抜き出すのってどうやると効率的なの?

今、かなり無理矢理抜いてるんだけど、諸兄のご助言お願いします。
0559デフォルトの名無しさんNGNG
それは、たとえば2chのスレの中から、IPアドレスを検出する、という話か?
0560デフォルトの名無しさんNGNG
ある文字列というのがどういうものなのか説明せずに
回答者にエスパーであることを望むお前はどちらの何様?
0561558NGNG
言葉足らずでスマソ。

まずC言語です。
ある文字列とはたとえば、
char *string="hogehoge 192.168.0.1 hogehoge"
みたいな文字列です。
0562デフォルトの名無しさんNGNG
数字を見つけて数字が終わるまでにピリオドが3つある文字列
0563デフォルトの名無しさんNGNG
を検索する
0564デフォルトの名無しさんNGNG
>>1
板違い
WebProg板行けよボケが
0565デフォルトの名無しさんNGNG
>>564
気違い
電波板逝けよボケが
0566デフォルトの名無しさんNGNG
香ばしくなってまいりました
0567デフォルトの名無しさんNGNG
釣れた
0568558NGNG
>>562
とりあえず、それでやってみます。
0569デフォルトの名無しさんNGNG
>>556
出来るよ。sf.netに幾らでもサンプルが転がってるよ。

ところで、
>>554
> bind(2)せずにconnect(2)した場合に適当な設定(INADDR_ANY、空いてる非特権ポート)
> を使わずにエラーとするのはsocketの仕様としか言いようが無い。

これ何? IPアドレスを複数持っていると明示的にbind(2)しないといけない、
実装があるということ? 仕様ではないと思うけども。
0570デフォルトの名無しさんNGNG
>>569じゃないけど、
IP Aliasを使う場合の事を言ってるのかな?

そうじゃなくて、例えばループバックで127.0.0.1と、NICに192.168.0.1
みたいな場合だって、ある意味IPアドレスを複数持ってる事になるの?
0571デフォルトの名無しさんNGNG
パソ初心者板から誘導されました。よろしくおねがいします。

ネットワークがわかる偉い皆様、助けてください。
会社で、仕事中に2ちゃんねるしてる時に限って、画面が上下にいきなり揺れます。
前の会社では、システム課が別にあって、CP関係で分からないことがあって電話すると
向こうから私の画面をいじって説明してくれたりしてたんです。これもネットワーク
ならではですよね?
で、今の会社も、掲示板とかあるのでネットワークは組まれてるのですが
画面の監視までされてるのかどうか、どこを見たらわかりますか?
ネットワークアイコンからは、みんなのデスクトップやマイドキュメントの
「フォルダ」は見れたけど、画面って見れるの?
たまにはこんな初心者も相手してやってください・・・・
0572571NGNG
あ、ちなみに揺れるというのは、
スクロールバーをつかんで上下にゆすった感じ。
思い込みかもしれないけど、いかにも「見てるぞ」って告知みたいで
腹立たしいんです・・・・・腹たてれる立場じゃないけど。
0573デフォルトの名無しさんNGNG
誘導した奴を殴って来い
0574デフォルトの名無しさんNGNG
先輩!すごい新人が来ますた!
0575デフォルトの名無しさんNGNG
ネタとしてはなかなかオモロイな(w
0576571NGNG
>573
殴りたいッスよ・・・・さすが初心者板、分からないようでした。
先輩、たのみます、ネタじゃないから悲しいっすよ・・・
0577デフォルトの名無しさんNGNG
>>571
どのスレの何番からきましたか?
教えてください。
0578571NGNG
「パソコン初心者板総合質問スレッド」というところです。ただ、私がそこに
縋ったのが2月中旬に、会社からだったのですが、そこは今すでにVol.329 で
今日たった板のようです。私が行った時VOL何だったのかは覚えてません。
そこと、「くだらねぇ質問はここに書きこめ」という所です。
二箇所で聞いたらマルチなんですよね、知らなくて。
「プログラムとかネットワーク板にいけヴォケ」扱いでした・・・・
0579デフォルトの名無しさんNGNG
>>571
ウソはもう少しうまくつこうね。
ウソの上塗りは傷口を広げるだけですよ。
0580571NGNG
あーあもう・・・・
探せるもんなら探してるよ過去ログ・・・
0581デフォルトの名無しさんNGNG
/etc/hostsで
127.0.0.1 localhost
192.168.0.1 hoge
としているのに gethostbyaddrで 127.0.0.1 のホスト名を調べると hoge が返ってくるのは
どうしてですか?
0582デフォルトの名無しさんNGNG
>>580
> あーあもう・・・・
> 探せるもんなら探してるよ過去ログ・・・
このスレを読んで、いいかげん、スレ違いだということに気づいたらどうなの?
0583デフォルトの名無しさんNGNG
571は透明あぼーんしました
0584デフォルトの名無しさんNGNG
ついでに574も透明あぼーんしました
0585デフォルトの名無しさんNGNG
>>571
とりあえずウイルスチェックしろ
0586デフォルトの名無しさんNGNG
>>581
OSもライブラリもわかんねーんであれなんだけど、とりあえず、
$ ltrace getent hosts 127.0.0.1
$ strace getent hosts 127.0.0.1
とかやってみれば? で続きはそのOSの板かライブラリのスレで。
0587デフォルトの名無しさんNGNG
hostsの設定じゃなくてそのマシン自体の名前を返しているのでは?
0588デフォルトの名無しさんNGNG
>>571
あんた監視されてるんだよ(w
http://www.beyou.to/usr/mithras/
0589デフォルトの名無しさんNGNG
>>588
ワロタ
PCの画面を盗聴(?)するアプリの存在は知ってたが、
商品として売り出すとは。
商魂たくましい会社だな(w
0590デフォルトの名無しさんNGNG
>>571
LANとは別に画面キャプする方法もあるよ
見慣れない装置が繋がったりしてないか?
0591581NGNG
>>571みたいなスレ違いな質問にはみんな答えるのに
>>581には誰も答えてくれない (´・ω・`)ショボーン
0592デフォルトの名無しさんNGNG
あれ?2ちゃんって質問にはちゃんと答えるのが義務だったんだ。ふーん、初耳。
で、>>586は無視?
0593デフォルトの名無しさんNGNG
>>581
hostent.h_addr_listには何が入ってますか?
0594デフォルトの名無しさんNGNG
>>591
>>571はいじるのが面白そうだから反応した人が多かったかと。。
0595デフォルトの名無しさんNGNG

0596デフォルトの名無しさんNGNG
>>591
>>587で答えたんだけど・・・
0597デフォルトの名無しさんNGNG
全銀TCP/IPってなんなのでしょうか?
TCP/IPやSNAとかと並ぶ物?
HTTPやFTPと並ぶ物?
それとも全くの別物なんでしょうか。

調べてみると、ライブラリが販売されているようで、
TCP/IP上で動くような感じがするので、HTTPや
FTPと並列の物のような気もするんだけど、
ホストとも通信出来るらしいので別物のような気もします。
みんななら、ライブラリ使わなくても1から実装出来ちゃうんですか?
0598デフォルトの名無しさんNGNG
ライブラリって何を指して言ってる?
ちなみにソケットライブラリさえあれば俺みたいな素人でも色々できる。
0599デフォルトの名無しさんNGNG
>>597
全銀プロトコル(通称) over TCP/IPのことでしょ。
http://www.net.intap.or.jp/INTAP/information/journal/no.49/intro49.htm

> ホストとも通信出来るらしいので別物のような気もします。

そりゃ、over TCP/IPじゃなくて、半二重ベーシック手順の昔のやつ。
こっちはJISに規格票があるんじゃなかったかな。

> みんななら、ライブラリ使わなくても1から実装出来ちゃうんですか?

時間もったいないから、んなことは止めた方がいいよ。

0600デフォルトの名無しさんNGNG
プログラム勉強するなら何から始めればいいか誰か漏れに教えてください
0601デフォルトの名無しさんNGNG
>>600
スレ選び
0602デフォルトの名無しさんNGNG
>>600
勉強する方法を人に聞かないで自分で考え試行錯誤することから
でも、もう聞いちゃったので無理
諦めるしかない
0603デフォルトの名無しさんNGNG
あーあ
0604597NGNG
>>598
こんな感じのものを考えてます。
http://www.msol.co.jp/senet/emulator/ZentcpDOWN.html
http://www.intercom.co.jp/bw/tcp/middleware.html

>>599
over TCP/IPなんすね。教えてもらったページを読めば
下位レイヤーにTCP/IP使っているのはよーくわかりました。
さすがに、ゴリゴリと1から作る奴はいないですよね。
もし、そーいう話が来たら上のような既存品を上手く
流用しようと思います。

そんでは。
0605デフォルトの名無しさんNGNG
個人で作ることを前提として。
俺ならこんなのに金払うのはバカらしいから自分で作る。
0606599NGNG
>>600
推薦図書スレに行け。

>>604
> さすがに、ゴリゴリと1から作る奴はいないですよね。

いや、俺は10年以上前、学生バイトでover TCP/IPに相当するものを造らされた。
単にTCP/IP経路をイントラネットのtunnelingに使うだけなので、
layer 3より上に立ち入る必要はない、と主張したのだが、
layer 7 gatewayを作ることになった。(何の変換もなし(藁)

状態遷移させるだけなので簡単だけど、
糞プロトコルだから、得るところが何もない。
なるほどと思えるプロトコル設計がまるでない。手間がかかるだけのやっつけ仕事。

既存のライブラリ使って、後でライブラリを入れ替えられるような
ライブラリwrappingの設計を真面目にやった方がいいよ。

over TCP/IPの版、TCP使ってるのに2048byteが上限なのが笑えるよな。
どうしても上限付けたいなら、前と同じにしておけば下位互換性も持つのに。アフォ
0607デフォルトの名無しさんNGNG
Windowsでウィンドウを持たないアプリなので、winsock2のイベントオブジェクトを使おうとしています。
で、質問なのですが
WSAAsyncGetHostByNameのイベントオブジェクト版ってのはあるのでしょうか?
0608デフォルトの名無しさんNGNG
>>599
>> ホストとも通信出来るらしいので別物のような気もします。
> そりゃ、over TCP/IPじゃなくて、半二重ベーシック手順の昔のやつ。

最近のホストは、LAN インターフェースぐらい持ってるから、over TCP/IP なんかも直接繋げる。
0609デフォルトの名無しさんNGNG
>>607
スレッド生成して、gethostbyname() から結果が返ってくればイベントをセットすればいいだけかと...。
0610デフォルトの名無しさんNGNG
>>609
TerminateProcess以外の手段で問い合わせをキャンセルできますか?
0611デフォルトの名無しさんNGNG
もといTerminateThread
どっちにしてもかなり最後の手段なのであまり使いたくない
0612デフォルトの名無しさんNGNG
>>607
イベント版は無いので、API用にダミーウィンドウを動作させるしかないかと。
0613デフォルトの名無しさんNGNG
>>607
イベントを利用するだけならウインドウは必要ないが、
いったい何のために作るの?
0614デフォルトの名無しさんNGNG
自分でDNS鯖に投げれ。
0615デフォルトの名無しさんNGNG
hostsがどうとかNISがこうとかWinならlmhostsやNetBIOSやWINSが
ああとかややこしそうなので車輪の再発明は避けたい
0616デフォルトの名無しさんNGNG
フレッツADSLを利用しているのですが、ルータの外側NICにグローバルIPを割り振られて
内側はIPマスカレードにしています。
このような環境でルータの外側NICのIPアドレスを取得したいのですがどのような方法が
あるのでしょうか?
0617デフォルトの名無しさんNGNG
>>616
公開IRCサーバにでも繋げて自分の情報をとれば?
0618デフォルトの名無しさんNGNG
やっぱり無理みたいですね。
0619デフォルトの名無しさんNGNG
ルータからPPPの情報を取り出せればいいんだろうけど、
あんまりそういう話は聞かないねえ
0620デフォルトの名無しさんNGNG
UPnPが使えればなんとかなるかも
0621デフォルトの名無しさんNGNG
>>616
CheckIP でググれば、アクセスしてきたホストの IP アドレスを返してくれるサーバーがいっぱいある。
(DDNS のために提供してらしい。)

例えば、http://dynamic.zoneedit.com/checkip.html
0622デフォルトの名無しさんNGNG
>>621
あっ、ありがとうございます。
さすがこのスレの人はレベル高いですねー
0623デフォルトの名無しさんNGNG
>616
透過串が刺さってたらどうする?
0624デフォルトの名無しさんNGNG
>>616
ルーターは何使ってるんだろ?
ほとんどのADSLのルータって、ウェブの管理インターフェース持ってると
思うし、その管理画面上から WAN側の IP 情報を取得できると思うので、
perl かなんかで自動的にルータにアクセスするスクリプトでも書いたら
どうだろう?オレは前はメルコのルータ使ってたときはそうやって自動取得
してたよ。 今は Aterm を使っていて、Atermは syslog の機能を持っている
ので、他のマシンに syslog 飛ばしてそっちでメッセージ解釈させて IP を
取得してるけどね。
0625デフォルトの名無しさんNGNG
>>623
透過串ってなんですか?直接>>621のサイトにconnectしても透過串のアドレスになってしまいますか?

>>624
atermです。そんな機能があったんですね。
でも>>621のサイトにアクセスするほうが簡単そうですね。
0626デフォルトの名無しさんNGNG
>>621のやつ、XMLで返してくれるともっと嬉しいんだけどな。
0627UNIX使いNGNG
>>616
$ traceroute -m 2 pc2.2ch.net(適当なIPアドレスでもいい)

Windowsだとtracertだっったかな?
同じ事するコードを(例えばCで)書くのも簡単だよね。
0628UNIX使いNGNG
>>627
あ、これhop count増やさないstealth routerだと駄目。
0629デフォルトの名無しさんNGNG
>>626
それがまさにUPnP
0630デフォルトの名無しさんNGNG
>>624
俺、そうしている
てかそーゆー常駐ツール作って使ってる
いちいちブラウザ立ち上げるのメンドイし、接続状態の把握とかに使用
0631デフォルトの名無しさんNGNG
>>600
http://cruel.org/freeware/hacker.html
0632デフォルトの名無しさんNGNG
趣味程度で1ヶ月程度しかまだネットワークの勉強してない者ですが、質問です。
過去ログに合った場合はすんませんです。一応確認したのですが。

Winsockを使用したプログラムを作ってまして。
で、一応、LAN、イントラネット内では回線は繋がるんですが(会社の回線勝手に使用)、
ADSL等の、まぁ家庭で使用している、回線類ではまったくもって繋がらんのですが何故?
目指す所としては、P2P回線を構築したいのですが。
初心者なりに考えた予想では、接続先のIPが違うのかなぁとか思ってるのですが。
>>621 にある、 http://dynamic.zoneedit.com/checkip.html 等で記述された
IPを使用してるんですが、これって全然違うんですかね?ひょっとして。
初心者ですんませんです。ちなみに、自宅→自宅って感じでテストをしています。
それとも、acceptで、接続待ちを行っていますが、ここで何らかの処置を行うのでしょうか?
もう分からんです。サッパリ。とりあえずうんこして寝ます。
0633デフォルトの名無しさんNGNG
>>632
情報不足だ。
繋がらん、とはどんな状態だよ。
0634デフォルトの名無しさんNGNG
多分ルータに接続しようとしてる。
192.168.*.*とかのLAN内にサーバ勃てた場合、WANからは入れないよ。
0635デフォルトの名無しさんNGNG
>>633
サーバー側は待ち状態になっていて、
クライアント側はconectした状態のままな状態です。
ちなみに、非同期通信で繋がった場合はプロシージャーから
winsockのメッセージを取得するようになってます。
繋がるとメッセージを送信するプログラムになってるのですが、来ない。
これは完全に繋がってない状態だと思われますです。
0636デフォルトの名無しさんNGNG
>>634
ああ、それっぽいです。サーバー側のIPの設定をローカルの設定にしとりました。
ただ、上記に書いた方法でIPを登録して、bindをすると生成に失敗します。
取得してるIPがやはり違うんでしょうか?
0637デフォルトの名無しさんNGNG
>>636
LANの仕組を知る事が先決では。
0638デフォルトの名無しさんNGNG
>>637
了解しました。精進します。
0639デフォルトの名無しさんNGNG
    [internet]
       ┃
     h.o.g.e
     [router]
    192.168.0.1
  ┏━━┻━━┓
 [client]    [server]
192.168.0.3  192.168.0.2

として、キミが取得してるのはinternet側のh.o.g.e。
clientがh.o.g.eにリクエスト出してもserverには届かないよね。
0640デフォルトの名無しさんNGNG
>>638
それよりも、ADSLルータについて勉強しろ。
そうすればどうすればいいかわかる。

ダイヤルアップで接続してから同じことすれば
うまくいくはずだけど。
0641デフォルトの名無しさんNGNG
ちょっと気になったのですが。

アップローダーが出来るなら、
HPを表示しただけでHD内のファイルを転送できませんか?
0642デフォルトの名無しさんNGNG
>>641
出来るなら誰かやってるだろう
0643デフォルトの名無しさんNGNG
ファイル名を
c:\windows\user.dat
にして、HPを開いた時に送信ボタンを押した事にすれば
可能だと思うのですが。
なんで出来ないのですか?
0644デフォルトの名無しさんNGNG
>>643
>HPを開いた時に送信ボタンを押した事にすれば
どうやって?
0645デフォルトの名無しさんNGNG
じゃ、ユーザーにクリックさせればあらかじめ指定したファイルを
HDから盗めるの?

「押してみ」ってボタンを載せて。
0646デフォルトの名無しさんNGNG
この板はプログラムを作る人のための板です。

あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。

その他、お勉強ページへのリンクスレ、
推薦図書・必読書スレ
もあります。

プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。
Javascript は Web 制作板、CGI は Web プログラミング板へ。
業界談義、愚痴はプログラマ板へどうぞ。
ゲーム関係の話題はゲーム製作板へどうぞ。
ネタ、板とは関係の無い話題はご遠慮ください。
0647デフォルトの名無しさんNGNG
>>643
おまえは馬鹿か?
そこまで書いてわからんのか?
0648デフォルトの名無しさんNGNG
UDPで通信をするソフトを作っているのですが
受信バッファーをフラッシュする方法を教えて下さい。
0649デフォルトの名無しさんNGNG
>>648
あなたの環境がまったくわからないのに、どう答えろと?
0650デフォルトの名無しさんNGNG
>>649
これは失礼しました。
WindowsXPです。
該当するAPI等があれば教えて下さい。
0651あぼーんNGNG
あぼーん
0652デフォルトの名無しさんNGNG
>>650
意味がないんじゃないの?フラッシュしても。
UDPでしょ?相手に届く保証も無い(欠けてる事もある)し、何バイト単位で送信というわけでもないし。
ヘッダやフッダとかデータ区切りつけて送信してるんでしょ?区切りまで
空読みしては?
■ このスレッドは過去ログ倉庫に格納されています