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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2005/12/31(土) 14:07:24
主にソケットに関しての質疑応答スレッドです。

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

関連リンクは>>2-10辺り
足りなかったら適当に付け足してね

前スレ
ネットワークプログラミング相談室 Port15
http://pc8.2ch.net/test/read.cgi/tech/1128088448/
0877デフォルトの名無しさん2006/05/12(金) 18:37:32
>>876
HTTP/1.0以前は同じページにcssやら画像100枚やら張られるなんて
想像してなかったんだろうな。
0878デフォルトの名無しさん2006/05/12(金) 20:20:32
HTTPは「メッセージを送信して応答をもらって切る」の繰り返し。
RTSPもHTTPに似てるから同じでいいんじゃないか?w

0879デフォルトの名無しさん2006/05/13(土) 00:28:39
>874-878

レス、ありがとうございます。
結局のとこ、どうなんでしょうね。
接続を維持していたほうが負荷が小さいのは間違いないですが。
切っても良いっちゃ良いんでしょうが。

0880デフォルトの名無しさん2006/05/13(土) 01:43:17
>>873
参考情報
HTTPのKeep-Aliveの説明
ttp://www.studyinghttp.net/connections
0881デフォルトの名無しさん2006/05/13(土) 16:59:59
>>879
世の中には接続を切るとそのままセッションも捨てられるしょぼいサーバも存在するかも。
切らないほうがトラブルに見舞われることは少ないと思われ。
08828732006/05/13(土) 21:37:49
>880-881

ありがとうございます。
ここまで、書いててまったく気づいてなかったのですが、
実はサーバー側の話です。

サーバー側で切ってしまうと、クライアントの方で問題にならないかな〜と
思いました。

まあ、いろんなクライアント試してみろって話ではあるんですが。
0883デフォルトの名無しさん2006/05/13(土) 22:06:13
繋げっぱなしでセッション保持するプロトコルはモバイル端末で使えないな。
0884デフォルトの名無しさん2006/05/14(日) 02:13:35
>>883
バッテリ駆動機器は別だろう、勿論。
0885デフォルトの名無しさん2006/05/14(日) 09:05:04
>>882
問題にならないようにHTTPにはCookieがある。
HTTPはもはや汎用のプロトコルでセッション管理も必要だから。

あなたがどういう応用を想定しているか分からないので、
あなたのケースではどうだかは分からない。
0886デフォルトの名無しさん2006/05/15(月) 02:12:01
UDPで送信する際、プログラマーはMTUサイズを意識しないで良い。
送り側のシステムでMTUサイズに自動で分割され、受け側のシステムで自動合成される。
つまりパケット喪失や輻輳等はあるが、自動合成後のパケットデータは信用できる。

と認識しているのですが、正しいでしょうか?

winsock2.0
vs2003
winXP win2000
0887デフォルトの名無しさん2006/05/15(月) 05:16:44
>>886
沖縄から北海道へ行くのに地面を掘ってブラジルへ行こうとするほどズレている
0888デフォルトの名無しさん2006/05/15(月) 11:05:21
教えて下さい

winsock2なんですが、一度listenしたものをプロセスを維持したまま解除
(listenしない)にしたいです。
listenに使用したfd(SOCKET)を使ってshutdownやclosesocketしても
まだLISTEN状態です。
「setsockoptでSO_REUSEADDRを使えばよい(次回からも同ソケットに
bind&listenできる)」って記述は多くあるんですがそのものを解除したい場合
はどうしたらよいでしょうか。
08898862006/05/15(月) 11:17:48
出直してきますw
0890デフォルトの名無しさん2006/05/15(月) 11:28:54
listenしてるソケットをclosesocketすればいいだけじゃないの?
08918882006/05/15(月) 12:09:43
>>890
早速ありがとうございました。
shutdown -> closesocket だとダメでしたが、closesocket だけにすればLISTENを
解除することができました。

「shutdownは必須」とばかり思ってましたがリスナーソケットですし明示的に
shutdown(s, SD_RECEIVE)する必要は無かったんですね。勉強になりました。
0892デフォルトの名無しさん2006/05/15(月) 20:13:32
たしか、リッスン状態でも実際は開いてないのがあったような・・・・・標準サービスとかみたいなの
0893デフォルトの名無しさん2006/05/16(火) 08:41:36
ママさーん! クッキンストップ!
心のポートで聞いてくれないんです!
0894デフォルトの名無しさん2006/05/16(火) 13:01:25
>>892
プログラム側でaccept()してないだけでしょ?
0895デフォルトの名無しさん2006/05/16(火) 19:56:32
VC++6.0、MFCライブラリのCAsyncSocketを利用して
クライアントから1秒ごとに送られてくる、文字列を受信して
クライアントへその都度文字列を送信する
というサーバープログラムを作りたいのですが、
C++もソケットプログラミングも初心者の自分が勉強しやすい
おすすめの参考書、サイトありませんか?
0896デフォルトの名無しさん2006/05/16(火) 20:36:54
無い。
0897デフォルトの名無しさん2006/05/19(金) 23:57:49
winsock2ですが、RAWソケットを使うことができますか?
IPヘッダのポート番号をいじりたいのですが。
よく下のような表をみるのですがあってますか?

RAW Socketでいじれる範囲
----------------------------------------------------
Win95/98/Me Win2000/XP(SP1)/XP(SP2)
Ether fame NG NG
IP header NG OK

0898デフォルトの名無しさん2006/05/20(土) 00:13:07
すみません
サーバ側にあるDLLをネットワークを介してクライアント側で
使用することは出来ますでしょうか?
具体的には、CGI等でサーバ側のDLL機能を呼び出しクライアントの
PCを操作するようなことを想定しています。
COMとかに関係してくるんですかね?
よろしくお願いします
0899デフォルトの名無しさん2006/05/20(土) 03:40:11
>>898
CGI ならネットワーク関係ないです。
手抜きしてないでちゃんとサーバの方の資料を読んで。
0900デフォルトの名無しさん2006/05/20(土) 09:17:53
>>897
IPヘッダにport番号はありません。
0901デフォルトの名無しさん2006/05/20(土) 10:07:52
>>900
プロトコルIDだろ。そのくらい推測してやれよ。
↓ここでも読んででなおしてこい。
http://www.kachijiten.com/realintention/realbbs032/
0902デフォルトの名無しさん2006/05/20(土) 10:23:34
推測は、無用な混乱の元です。
0903デフォルトの名無しさん2006/05/20(土) 10:29:23
>IPヘッダのポート番号をいじりたいのですが。


ここ読む限りどっちなのかわからんな
0904デフォルトの名無しさん2006/05/20(土) 10:41:14
>>901
プロトコルID ってなんだ?
プロトコル番号のことかな。
ていうか、プロトコル番号知ってる奴があんな質問しないと思う。
単に、IP ヘッダと TCP/UDP ヘッダの区別がついてないだけだろ。
09059002006/05/20(土) 10:54:37
これでいいか? > >>901

RAW Socketでいじれる範囲
----------------------------------------------------
Win95/98/Me Win2000/XP(SP1)/XP(SP2)
Ether fame NG NG
IP header NG OK
TCP/UDP header OK OK
0906デフォルトの名無しさん2006/05/20(土) 11:11:44
馬鹿はほっとこうよ・・
0907デフォルトの名無しさん2006/05/20(土) 17:08:25
906がほっとかれている件について
0908デフォルトの名無しさん2006/05/20(土) 18:03:59
>>907の時点で906はほっとかれてないが
0909デフォルトの名無しさん2006/05/20(土) 18:07:41
馬鹿はほっとこうよ・・
09108972006/05/20(土) 22:38:44
>>905
ありがとうございました。 
0911デフォルトの名無しさん2006/05/20(土) 22:40:10
>>906 >>907 >> 908 >>909
のせいで良スレが荒れるのが許せない。。。
0912デフォルトの名無しさん2006/05/21(日) 01:00:26
908や911のような人種がこの世から消えますように(-人-)
0913デフォルトの名無しさん2006/05/21(日) 01:01:21
>>906-913
ここまであぼーん推奨
0914デフォルトの名無しさん2006/05/21(日) 03:43:55
C#の質問失礼します。
[TcpListener].AcceptTcpClientにて得たTcpClientから接続要求してきたクライアントのIPアドレスを導き出したいのですが、
どうすれば良いのでしょうか?
--------------------------------------------
VS2003
XP 2000
0915デフォルトの名無しさん2006/05/21(日) 04:23:44
>>914
getpeername()
09169142006/05/21(日) 10:32:09
自己解決しました。

s= [TcpListener].AcceptSocket()
s.RemoteEndPoint.ToString()
で行けました。
0917デフォルトの名無しさん2006/05/24(水) 14:57:32
初歩的ですいません。

ソケットって接続先がかわるたびに作成しなくちゃいけないんですか?
一つソケットを作っておいて、それを、アドレスの設定だけ変えて使いまわしては駄目なんですかね?
0918デフォルトの名無しさん2006/05/24(水) 15:19:22
>>917
TCPではできない。
UDPはそもそも「接続」という概念がない。
その他について俺は知らない。
0919デフォルトの名無しさん2006/05/24(水) 15:23:42
出来るよ。
使い回せないのは接続であって、ソケットではない。
ただしhalf closedにならないように注意。
0920デフォルトの名無しさん2006/05/24(水) 15:42:34
>>919
あ、そうか、connect() でやればいいんじゃん。あー!
09219172006/05/24(水) 16:11:50
レスありがとうございます。

出来るけど、一般的な方法ではないという事ですかね?

例えば、uriを入力したら結果を表示してくれる簡易ブラウザを作るとして、ソケットの作成は一回だけでいいんでしょうか?
それとも、uriを受け取るたびにsocket()とconnect()をすべきなんでしょうか?
0922デフォルトの名無しさん2006/05/24(水) 16:24:02
最初は毎回ソケット作り直しなよ。使い終わったらちゃんとcloseして。
それが問題になりそうになれば、(まあそんなことはないと思うけれど)
再利用するようにすればいいんじゃない?
ちょっとした落とし穴があるから、最初から再利用は進めない。

http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#time_wait
0923デフォルトの名無しさん2006/05/24(水) 16:27:41
まず、リクエスト毎にshutdown / 再connect が必要かどうかはプロトコルによります。
例えばHTTP/1.1 ならば同一ホストに対しては繋ぎっぱなしにできることもあります。

再接続が必要な場合には既存のソケットは close して socket で新しくソケットの作成
からはじめるのが普通です。

connect / shutdown と違って、ソケットの生成と破棄は単なるカーネル内のメモリ操作に
過ぎませんので、あえて避ける理由はあまり無いと思われます。
09249172006/05/24(水) 16:33:39
>>922
なるほど。わかりました。作り直すようにしようと思います。ありがとうございました。
09259172006/05/24(水) 16:37:17
>>923さんもありがとうございました。よくわかりました。
0926デフォルトの名無しさん2006/05/26(金) 20:24:43
プログラムからPingを打つにはどのようにするのがいいでしょうか。
環境はUnixです。Windowsならicmp.dllというのがあるらしいのですが…。
0927デフォルトの名無しさん2006/05/26(金) 20:55:31
シェルから呼べば簡単よ
0928デフォルトの名無しさん2006/05/26(金) 21:21:44
>>926
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int
socket(AF_INET, SOCK_RAW, proto);

manするとこう書いてある。
ってかmanしろボケ。
0929デフォルトの名無しさん2006/05/27(土) 00:02:17
権限とかいろいろ面倒だから、>>927の方法がいい。
0930デフォルトの名無しさん2006/05/27(土) 19:21:25
環境はUNIXでソケットを使用したUDP通信について質問があります
クライアントからサーバへsendmsgを使用し、UDP送信を行うとソケットに
自動的に空いてるポートが割り当てられますが、そのポートが割りついた
ソケットをそのまま使用して、recvmsgしても問題ないのでしょうか?
実際動かすと問題なく動作はするのですが、たまたま割りついたままに
なっているだけで、時間が経過すると外れたりするのでしょうか?
recmsgを使用するのであればbindすべきですか?
ご教授のほど宜しくお願いします
0931デフォルトの名無しさん2006/05/27(土) 20:13:22
くだらない質問してすいませんが、

c言語/winsockでネットワークプログラミングするとして、
送受信の時に
ttp://x68000.q-e-d.net/~68user/net/c-http-1.html
↑に書いてるようにファイル用の関数を使うべきなんですか?

send()やrecv()などの専用の関数がありますが、それは使わなくてもいいんでしょうか?
0932デフォルトの名無しさん2006/05/27(土) 20:31:58
http://x68000.q-e-d.net/~68user/net/c-http-2.html
0933デフォルトの名無しさん2006/05/27(土) 20:36:43
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/socket.7.html
0934デフォルトの名無しさん2006/05/27(土) 20:37:03
>>932
そこに書いてあるような方法が一般的なんですか?
09359312006/05/27(土) 20:45:00
場合によって使い分けるといった感じですかね。ありがとうございました
0936デフォルトの名無しさん2006/05/27(土) 20:46:51
どちらでも同じだと思います。
気になるなら send/recv の方を使っておいた方がよいでしょう。



http://www.linux.or.jp/JM/html/LDP_man-pages/man2/send.2.html

send() は、ソケットが 接続された (connected) 状態にある場合にのみ使用できる
(つまり、どの相手に送信するかは既知である)。
send() と write() の違いは、引き数に flags があるかどうかだけである。
引き数 flags が 0 の場合、 send() は write() と等価である。
また、 send(s,buf,len) は sendto(s,buf,len,NULL,0) と等価である。



あなたの見ているサイトのこちらの場所では

http://x68000.q-e-d.net/~68user/net/udp-2.html

UDPがsend/recv
TCPがwrite/read

みたいな書き方されてますね

09379312006/05/27(土) 20:52:49
>>936
よくわかりました!ありがとうございますm(_ _)m

0938デフォルトの名無しさん2006/05/27(土) 20:59:59
>>936
winsock らしいけど?
0939デフォルトの名無しさん2006/05/27(土) 21:02:36
>>938

なんでこんなとこ見てるんだろう?

ttp://x68000.q-e-d.net/~68user

いや、このサイトが良くないという意味ではなく。
0940デフォルトの名無しさん2006/05/27(土) 21:14:50
>>939
え?どういう意味??
MSDN を見ないって意味ならそれも仕方ないんじゃないかと思う。
だって、肝心なところは暗号化されてるし。

>>938 は、winsock では違うって意味で書いたんだけど。
09419312006/05/27(土) 21:29:34
winsockだとsend()とrecv()ですか?

http://www.golgo.jp/winsock.html#l_select
http://www.h5.dion.ne.jp/~sigma/homepage/cyberspace/httpclient.html#c07
http://stylefree.net/main/nprogramming/windows/windows1.shtml

この辺りのサイト見させてもらってるんですが、送受信(具体的に言うとHTTPクライアントのような物を作りたい)のあたりで混乱してしまって・・
どこかwinsockで詳しいサイトありませんかね?(参考書買えって感じですかね?w)
0942デフォルトの名無しさん2006/05/27(土) 22:48:32
>>941
良いサイトを探すのは難しいかもしれないです。
自分も同じことを考えたんだけど、最終的には本を買うしかなかった。
http://www.amazon.co.jp/exec/obidos/ASIN/4797330449/503-2450924-1963916
これがいいです。
っていうより、これしか選択肢が無い。

HTTP クライアントなら、WinInet とか使ったらどうですか?

自分の少ない経験から思っただけですけど、
クライアントに BSD 由来の API を使うのはやめたほうが
いいような気がします。

解説って需要あるんですかね?
ちょっと書いてみたいような気もする。
0943デフォルトの名無しさん2006/05/27(土) 22:59:21
>>1の
Winsock Programmer's FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/
で十分じゃないのか?
0944デフォルトの名無しさん2006/05/27(土) 23:04:53
>>943
充分じゃないと思う。
09459312006/05/27(土) 23:28:26
>>942
WinInet・・今ちょっと調べてみたんですけど、winsockよりだいぶ入り易そうですね。
今まで存在そのものを知りませんでしたw�d。

>>943
初級者なんで、一から順を追ってといった感じの解説サイト(本)じゃないと厳しいですね。。
0946デフォルトの名無しさん2006/05/28(日) 01:49:42
その様子だとエコーサーバを作成したこともなさそうだが
TCPのコネクション確立の仕方も知らずにネットワークプログラミングをするのはどうかと
#WindowsでHTTP/FTPだけならWinInetがあるから、知らなくても多少は大丈夫だろうけど

猫でもわかる〜でも読んでおけよ
しょぼいけど抑えるところは抑えてあるぞ
0947デフォルトの名無しさん2006/05/28(日) 11:55:09
本一冊でも買ったほうがいいと思うなあ。
インターネットで情報入手できる時代では有るけど、歴史が違うから、書籍のほうが詳細でよく吟味されてまとめてあって読みやすいよ。


この先、氏ぬまでwindowsしか弄らないと言い切れるなら、bsd系のapiも無視してもいいかも知れないけど、
unix系にしろ、歴史的経緯で基本はbsd系のapiに行き着くので、後で応用が利かずに苦労するよ。
たとえばTCPのソケットって面倒だなあってのは、UNIXの設計思想として何でもファイルの様に扱いたいって言うのが有って、ネットワークもファイルの様にソケットに読み書きすれば通信できるって風にしたいからとか基本が理解できてないと理解できないことも多い。
あとはネットワークに限らず、全てのソフトに言えるけど、長く使われてるものほど、バグが潰されてて枯れてて不具合に巻き込まれにくい。
IPスタックの歴史で長いのはbsd由来の実装だし、windows系はまだまだ歴史が浅いよ。

まあそろそろスーパーハカーがbsd由来のIPスタックに置き換わるような革新的なIPスタックを出してくれてもいいと思うけどな。
ディスクレスクライアントとか現実的に使われてる今時、ファイルシステムに依存するIPスタックもどうかと思うし。
0948デフォルトの名無しさん2006/05/28(日) 12:37:04
>945
>一から順を追って
つ[RFC]
もし、プロトコルを理解する以前の問題なら
つ[>>4]
0949デフォルトの名無しさん2006/05/28(日) 12:50:24
>>942
Winsockは、その本が一番いいと思うけど、
カマー本のWinsockという手もある。
あっちはプロトコルの話が少し多い。
0950デフォルトの名無しさん2006/05/28(日) 12:51:16
>>947
ディスクレス・クライントはファイルを使わないのですか? (そうではないでしょう)
0951デフォルトの名無しさん2006/05/28(日) 13:04:23
>ファイルシステムに依存するIPスタックもどうかと思うし。
ソケットがwriteでかけて,readで読めるだけでしょ?
0952デフォルトの名無しさん2006/05/28(日) 13:07:41
ディスクリプタを扱えるだけだな
個人的には専用インタフェースが欲しいが
0953デフォルトの名無しさん2006/05/28(日) 13:08:23
ライブラリがいくらでもあるでしょ。
ほとんどのプログラマはわざわざソケットをじかに叩く意味もないし。
09549422006/05/28(日) 18:12:32
みなさんありがとうございました。
今は本格的にネットワークプログラミングを勉強しようと思ったわけではなくて、部分的に少し必要になっただけなので、winInetにお世話になろうと思います。
(時間があればみっちり勉強したいんですが・・)
09559452006/05/28(日) 18:14:00
>>954はレス番ミスです。すいません。945でした;
0956デフォルトの名無しさん2006/05/28(日) 19:33:53
この手の話って必ず RFC を必死で薦める人が出てくるんだよね。
初学者だって書いてあるじゃない。
なんで RFC 薦めるの?
読んだことないけどなんかいい物だって聞いてるから?
0957デフォルトの名無しさん2006/05/28(日) 19:35:46
×初学者
○めんどくさがり
0958デフォルトの名無しさん2006/05/28(日) 19:38:02
>>957
あのねぇ。
ここまでの書き込み見てわかるでしょ。
ネットワークどころか、プログラミングの初学者なの。
そういう人になんでわかりにくいもの薦めるかなぁ。
混乱させて楽しむってやつですか?
0959デフォルトの名無しさん2006/05/28(日) 19:38:30
プロトコルの仕様に関しては RFC で必要十分だから。
噛み砕いて欲しいならせめて 「○○ってどういう意味ですか?」 くらいまで落として欲しいもんだね。
0960デフォルトの名無しさん2006/05/28(日) 19:39:32
教えてクンは神様です。
偉いんだぞ!
おまいら頭が高い!
0961デフォルトの名無しさん2006/05/28(日) 19:41:12
>>959
この人は、そんな質問してないでしょ?
質問の答え書けばいいと思います。

Linux 系の人がうそ教えて喜んでたけどさぁ。
あれほんと悪質だよ。

ちゃんと答えかいてやればいいじゃない。
0962デフォルトの名無しさん2006/05/28(日) 19:42:49
>>961
じゃ、おまいが書いてあげれば良いじゃないか。
0963デフォルトの名無しさん2006/05/28(日) 19:43:26
バカが出たぞー
0964デフォルトの名無しさん2006/05/28(日) 19:44:29
>>960
なんかわかってしまった。
きっと教えるマニアっていうのがいるんだよね。
で、必死でぐぐりながら答えるの。
で、うまくぐぐれないと怒り出すの。
で、ぐぐってるだけで、きちんと知ってて教えてるわけじゃないから、
うそ教えてるの。
で、何で私が頭に来てるか理解できない。
0965デフォルトの名無しさん2006/05/28(日) 19:45:07
>>962
書いてあげたじゃん。
ちゃんとうそ教えてる人にも訂正するチャンス与えた。
0966デフォルトの名無しさん2006/05/28(日) 19:45:17
自分何も回答しないくせに、回答した人にケチ付ける人マンセー
0967デフォルトの名無しさん2006/05/28(日) 19:46:42
漏れはRFCは全部暗記してる
0968デフォルトの名無しさん2006/05/28(日) 19:47:16
>>966
教えた。
過去ログ嫁。
すっごい感謝されてる。
涙流しながらありがとうって言われたよ。
0969デフォルトの名無しさん2006/05/28(日) 19:48:44
>>967
嘘つけ。
0970デフォルトの名無しさん2006/05/28(日) 19:48:57
>>967
神降臨
0971デフォルトの名無しさん2006/05/28(日) 19:51:27
>>968
あなた様のおかげで命を救われ、人生をやり直すことができました。
その節は本当にありがとうございました。
0972デフォルトの名無しさん2006/05/28(日) 19:55:22
ぬるぽ
0973デフォルトの名無しさん2006/05/28(日) 20:06:13
      , イ)ィ -─ ──- 、ミヽ
      ノ /,.-‐'"´ `ヾj ii /  Λ
    ,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
   ノ/,/ミ三ニヲ´        ゙、ノi!
  {V /ミ三二,イ ,  /,   ,\  Yソ
  レ'/三二彡イ  .:ィこラ   ;:こラ  j{
  V;;;::. ;ヲヾ!V    ー '′ i ー ' ソ
   Vニミ( 入 、      r  j  ,′  <仲良くなってくれ
   ヾミ、`ゝ  ` ー--‐'ゞニ<‐-イ
     ヽ ヽ     -''ニニ‐  /
        |  `、     ⌒  ,/
       |    >┻━┻'r‐'´
      ヽ_         |
         ヽ _ _ 」    

  ググレカス [ Gugurecus ]
  ( 前224 〜 前194 )
0974デフォルトの名無しさん2006/05/28(日) 21:59:56
まぁでもこのスレはなぜか答えずに煽る人が多いのも確か
0975デフォルトの名無しさん2006/05/28(日) 22:27:26
馬鹿に対話を開始するヤツも馬鹿>>956
0976デフォルトの名無しさん2006/05/28(日) 22:28:40
馬鹿に対話を開始するヤツも馬鹿>>975
レス数が950を超えています。1000を超えると書き込みができなくなります。