[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 03/27 11:55 / Filesize : 263 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:ftp-data mailto:sage [2007/08/07(火) 01:47:35 ]
主にソケットに関しての質疑応答スレッドです。

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

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

前スレ
ネットワークプログラミング相談室 Port19
pc10.2ch.net/test/read.cgi/tech/1159692799/

関連スレ
Java ネットワークプログラミング 【教えて!】
pc11.2ch.net/test/read.cgi/tech/1086238859/


651 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 20:32:06 ]
Linuxでクライアント書いてるんだけど
closeが完全に終わるまで待つにはどうしたらいいかわかんないので
誰か教えれ

652 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 20:45:11 ]
shutdownで半クローズ → 相手にEOFが届く → 相手がソケットを閉じる → EOFが来る → こっちも閉じる
とかじゃだめなん?

653 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 21:30:05 ]
>>652
だめじゃない!だめじゃないぞ!いける!

654 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:43:09 ]
それはさ、こっちの最後の送信結果が、closeしちゃうと判らなくなるからで、
別にこっちが送信してないなら勝手にcloseして終わりにしたらいいじゃん。

655 名前:デフォルトの名無しさん [2007/12/25(火) 14:18:46 ]
非同期モード、非同期イベントを利用して
localhost上のバイナリファイルをダウンロードしようとしているのですが、
ブロッキングを起こしてしまいます。

非同期モードを解説したサイト等ありましたら、
教えてほしいです。

656 名前:デフォルトの名無しさん [2007/12/25(火) 14:54:45 ]
DNA.TV⇒デジネイション.テレビジョン⇒ステージ.オン.エアー <IE7テストバージョン>
dnatv.atspace.com/?S&1912501&166?S&1966612&280?S&1928546&28@HiSpeedVisionStageOnAir

657 名前:デフォルトの名無しさん [2007/12/25(火) 18:23:18 ]
WSAAsyncSelectでググったらいくらでも出てくるじゃねぇか

658 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 18:24:13 BE:295671825-2BP(312)]
ここは書き込めるようだな

659 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 18:26:49 ]
というか、その「ブロックを起こす」コードを晒してみたら?



660 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 19:31:54 ]
自己解決しました。
ありがとうございます!!

661 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 19:45:33 ]
どういたしまして

662 名前:デフォルトの名無しさん [2007/12/25(火) 23:27:54 ]
ARCNETは、スレ違いですか?


663 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:02:00 ]
いいや、違わない
なんなら422でもCANでも構わない

664 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 16:02:49 ]
winsock2.org/samples/Ch04/ChekMail.c
このような非同期通知を利用して、アプリケーションを作成しているのですが、
こちらからサーバにデータをPOSTする処理をfor文を使い連続でしたいのですが、
どのようにしたらできますでしょうか?

665 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 16:47:16 ]
>>664
>こちらからサーバにデータをPOSTする処理をfor文を使い連続でしたいのですが、
できません。それが非同期処理。
キューなりリストにPOSTするデータを入れておいて、
FD_WRITEが取れたら書き込む。エラー処理も忘れずに。

どうしてもforでまわしたいなら、
スレッド分けて、WSAGETSELECTEVENTするスレッドで、FD_WRITEがきたら、
イベントをセットし、POSTするスレッドのfor内でそのイベントをWaitForSingleObjectするとか。
でも、それなら最初から同期処理で良い。

666 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:10:08 ]
とりあえず、-1がもどってくるまでは無条件に書き込めばいいんでないの。

667 名前:デフォルトの名無しさん [2007/12/31(月) 15:59:49 ]
教えてください。

サーバソケットでTCPの10〜100バイトの可変長データを受信する際、
そのデータのレングスが先頭2バイトにある識別子で判断できる場合って

・まず先頭2バイトをrecvする。
・識別子を判断して残りのバイト数をrecvする

というのが一般的なのでしょうか?

recvの第3引数に1500バイトくらいの十分余裕な値を指定すると
勝手に1データの終わりを検出してリターンしてくれるものなのでしょうか?

要は連続してデータが飛んでくる場合に
1データの区切りをrecv1回で済むのか、2回に分けないといけないのかが
知りたいです。

Linux環境です。

668 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 16:42:47 ]
読みたいなら読めばいい。場合によっては、区切りを検出してくれることもある。
ただ、「1500バイトrecvをかけて、1400バイト読んだ。ヘッダのレングスは500バイトだったよ〜」
ってときもあるから、500処理したあとに次のヘッダ処置にいかないとダメだし、
その逆の、「ヘッダは500バイトあるっていったけど、recvで戻ってきたのは200バイトだった」
って言う場合の処置もいる。

669 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:01:45 ]
>>668
レスどうもです。

頭悪くていまいち理解できてないんですが、受信バッファに
+----------
|ABCD・・・・
+----------
と入っていて
A=50バイト B=60バイト C=70バイト D=80バイト
だった場合、1500バイトでrecvかけたら
ABCDいっぺんに読めてしまうってことですよね?




670 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:23:50 ]
>>669
>>668じゃないけど、recvの第三引数に1500を指定するって事だよね?
それならABCD全部読めるかもしれないし、読めないかもしれない。
もしかしたら、Aの最初の5バイトしか読まないで返ってくるかもしれない。
完全に運の世界。
まあ受信バッファに本当にABCDが全部入ってるんなら全部1度に読めるけど、
プログラム側から受信バッファの内容を知る事はできないからやっぱり運。

だから普通は指定したバイト数読むまでrecvを何回も呼んできちんと読むような関数を作る。


671 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:30:50 ]
>>669
面倒だから、fdopenしてストリーム入力使いなよ。

672 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:39:53 ]
>>670
レスありがとうございます。
recvするたびにA、B・・・とデータの区切りごとにリターンしてくれる
ということでは無いんですね(そう都合よくはいかないか・・・)。

>>671
別の方法もあるということですか。
勉強してみます。ありがとうございました。

673 名前:デフォルトの名無しさん [2008/01/03(木) 17:15:51 ]
WindowsでIPヘルパを使っています。
複数のネットワークカードが刺さっている場合の取得順序について。

GetInterfaceInfo()での取得順序は何に依存するのでしょうか?
バスの位置でしょうか?



674 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 18:45:06 ]
select をつかって TCP 23ポートを開いてATコマンドを処理するプログラムを書こうとしている初心者ですが
select の動作がいまいち理解できなくて難儀しています。

サーバープログラムの場合 listen したファイルディスクリプタを readfds 集合に入れて select を実行した場合、
select が戻った時に readfds に listen 用 FD があると、ちょうどクライアント側が connect したタイミングなので
その場合accept してあげれば良い。のは大体分かりました。
で accept した FD を即座に select の readfds集合 と writefds集合 にいれているのですが、この場合
select が戻った時に readfds に accept した FD がある場合は、受信準備OKな状態で、この時に read すれば
受信データを得ることができて、 writefds に accept した FD がある場合は、送信準備ができた状態で、 write
してあげればデータを送信ができるんでしょうか?この時、実際受信したデータがないか、送信するデータがな
い場合もあると思うのですが、そういう場合は速やかに再度 select すれば問題ないですよね。。
このように理解しているのですが、何分うまくいかないのでどこか間違ってそうなのです。


675 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 19:11:44 ]
selectのwritefdsというのは、「現在送信バッファに追記出来る状態ですよ」って
のに近い。(まあ、connectの結果を見るのにも使えるけど。)
 普通は、readfdsだけ仕掛けておいて、戻ってきたらrecv発行->受信処理。
なにか書きたくなったら、すぐsend。-1(EWOULDBLOCK)が戻ってきたら、
続きを送信するためにwritefdを仕掛けて待機。writefdが立てば続きを送信。

676 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 19:48:51 ]
>>674
受信準備OKなものは、受信データがないってことはあんまりないと思うけど。

送信準備OKなものは、送信するものがなければ writefds から外すべき。
送信可能(送信バッファに空きがある)である限り、常に反応し続ける(selectが即座に返る)。

677 名前:674 mailto:sage [2008/01/08(火) 20:58:49 ]
なるほどサンクスです。write は失敗した時だけ writefds にいれとけばいいのですね。
ずっと select が返る状態だと、使う意味がなくなりますもんね。。

678 名前:674 mailto:sage [2008/01/09(水) 18:52:35 ]
連投すいません。

考えたのですが write( send ) はやりたい時に行い、失敗したら送れな
かったデータをバッファに置き次回 select で writefds をセットする。。。
。とすると、write を行ったのが select を行っているスレッドであれば、se
lect が戻った後に write なのでいいのですが、別スレッドで write すると
select しているスレッドは受信データがない限り戻らないので、即座に続
き送信できませんよね。
 select はタイムアウト設定できるようなので、タイムアウト1秒として、
送信するデータがあれば writefds をセットし select で戻れば送信として
は駄目なんでしょうか、、そういうソース見たことありませんが。。




679 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:06:45 ]
select使ってるのに、何でスレッドが分かれてるの?

まー、IPC用にソケット1本確保して、同時にselectで見張る手もあるけど、
writeが競合するとか嫌な事態になりそうだなー。



680 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:59:29 ]
適当なシグナルを発生させてやればEINTRで帰ってくるんじゃないかね
だめだったら679のようにselect起こす用のsocketpairかpipeかなんかを作って一緒に待たせておけばいい
writeはまぁmutexするしかないだろ

681 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:29:12 ]
おお、シグナルやパイプを使えばうまくいきそうですね。select使ったコードを探していた時に見たことあります。
いろいろ教えてもらったいまなら、理解できそうです。。
いろいろ、ありがとうございました。

682 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 14:54:36 ]
WinsockでWSAAsyncGetHostByName以外に非同期で
名前解決をする方法があれば教えて下さい。
コンソコールアプリからだと使いにくいです。。。

683 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 15:53:40 ]
>>674はtelnetプロトコル(rfc854)の存在を知っているのだろうか?
結構面倒なネゴシエーションが必要。

684 名前:デフォルトの名無しさん [2008/01/12(土) 16:46:36 ]
何が使いにくいん?

685 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 16:51:39 ]
httpしか繋げたことないから難しく見えるんじゃね

686 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 17:27:19 ]
>>682
スレッド起こして解決できたらイベントで通知

687 名前:682 mailto:sage [2008/01/12(土) 18:07:52 ]
>686
書き忘れていましたが複数のスレッドで同時に解決できるようにしたいんです。
でもgethostbynameだと同時に使えないから1つずつ解決することになって、
それはちょっと嫌だなあと。タイムアウトするまで次の解決ができないって状況は避けたい。

688 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 18:10:27 ]
gethostbyname2_rとかなかったっけ?

689 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 19:48:04 ]
たとえばadns使うとか。
NetBIOS系の名前解決はしてくれないけど



690 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:01:33 ]
クライアント・サーバ間を共通鍵で暗号通信をしたいのですが,
通常のクライアント・サーバシステムにおいて,あるクライアントとの
共通鍵の関連付けはどのように行うのですか

クライアントから通信を開始するとどの共通鍵で復号すれば良いかわからないと
思うのですが・・・

691 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:08:37 ]
クライアント識別子みたいなのと鍵を1:1にしてサーバで保持しておけばどうかな?

692 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:09:16 ]
使っていいのが共通鍵暗号のみなら
最初はユーザー名をそのまま送るしかないんじゃないの?
パスワードは暗号化して

693 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:12:31 ]
もしくは鍵からハッシュ値でも生成して最初の通信の時に付けておけば

694 名前:690 mailto:sage [2008/01/14(月) 14:07:03 ]
ありがとうございます
>>691
クライアントには,ユーザIDが与えられているので,それと関連付ける方法ができそうです.

ハッシュ値を使う方法もいけそうなので検討してみます.

695 名前:デフォルトの名無しさん [2008/01/14(月) 17:00:13 ]
zoomtv.web.fc2.com/?1xd04@VisualAirForce
zoomtv.web.fc2.com/?1xcvk@ParadiseCityTV
zoomtv.web.fc2.com/?1xcz8@DancingDuoMiku


696 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 22:25:39 ]
鍵交換方式使えばいいと思うけどね
まあ、どの程度の暗号強度を求めるのかで適当に決めればいいよ

697 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 03:48:31 ]
ハッシュ関数って勝手に使ってライセンスって問題ないのかな?
MD5とかSHA-1とか

698 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 04:28:58 ]
アルゴリズム自体には無いけどライブラリは別なんで気をつけないといかん

嫌なら自分で書け

699 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 05:28:48 ]
Javaならデフォでついてるけどな



700 名前:674 mailto:sage [2008/01/15(火) 12:02:02 ]
>>684
4-5年前 NetBSDの teldx だったかな、telnet サーバーのソースは見たことあります。
しかし、コードがトリッキーなのがはいってて理解不能でした。
teldx に限らず、while ループが何百行もつづいてたり、マクロがぐちゃぐちゃはいって
たりして読みずらい。。

701 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 13:15:06 ]
>>694
OpenSSLは/etc/ssl/certsに証明書が置いてあるよ。
もちろん証明書の中には公開鍵が入ってる。
openssl dgstコマンドでハッシュつくって、
そのハッシュが名前になったシンボリックリンクが本体へ向けてある。
WindowsでもOpenSSLならC:\etc〜になるだけで同じ。

702 名前:デフォルトの名無しさん [2008/01/15(火) 18:32:21 ]
マルチスレッドで以下のような構成です。
・UI スレッド(main スレッド)
・作業スレッド(Winsock1.1 初期化/後処理 + データの送受信)
この場合はWinsockのデータベース関数をどちらのスレッドで使用するべきですか?


703 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 18:35:21 ]
>>702
何がいいたいのかわからないのだけど…
>Winsockのデータベース関数
ってなにかな?

704 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:03:30 ]
gethostby〜とか

705 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 19:05:43 ]
netdb.h

706 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 22:28:42 ]
>>702
今時 Winsock 1.1 もどうかと思うが、どっちにせよ Winsock
の初期化/後処理 (Cleanup のことかな?) を作業スレッドで
やるなら、Winsock 関連の処理は作業スレッドでやった方が
いいと思う。

707 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 01:43:38 ]
新たに名前引き用スレッドプールを新設するのが好み。

708 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 11:02:38 ]
結果のコンシューマもマルチスレッディドになってないと意味ないけどね。

709 名前:デフォルトの名無しさん [2008/01/16(水) 16:51:22 ]
作業スレッド内でWinsockの処理を行うとして、
データベース関数はWSAAsyncGetHostByName等、非同期を用いるべきでしょうか?




710 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 21:59:30 ]
それは、君のやりたいこと次第だからなんとも言えないけど、
WSAAsyncGetHostByName() は、ウィンドハンドルを要するから
作業スレッドでは使いにくいよ。

ぶっちゃけ WSAAsyncGetHostByName() は、スレッド使わない
人向けだよ。

711 名前:デフォルトの名無しさん [2008/01/19(土) 15:19:46 ]
TCP最高や!
UDPなんか最初からいらんかったんや!

712 名前:デフォルトの名無しさん [2008/01/19(土) 22:03:37 ]
WSAAsyncGetHostByName()を使わないとすると
スレッド内でデータベース関数がブロッキングを起こさないようにするにはどうしたらいいですか?

713 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 22:13:38 ]
別のスレッドを起動してそれにやらせる

714 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:14:28 ]
ダイアログに貼付けたエディットの中の文字列をGetDlItemTextで取得し
gethostbyname関数を使うとNULLが返されるんですが、
NULLが返される原因としては、どんなものがありますか?

715 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:39:47 ]
プラットフォームがよくわからんけど、なんで errno
とか GetLastError() とかを見ないんだ?

716 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 00:41:25 ]
一番の原因として考えられるのは
渡した文字列を確認したりWSAGetLastErrorを見たりという簡単なことすら
やろうとしない人間がコードを書いていること

717 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 02:41:16 ]
ネットワークプログラミングとは関係ないし
WindowsAPIとも関係ないな


718 名前:デフォルトの名無しさん [2008/01/20(日) 23:45:31 ]
WSAStartupはWinMain側でしか出来ませんか?

719 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:01:24 ]
試した方が速くね?



720 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:37:06 ]
試して出来ませんでした。

721 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 00:48:30 ]
ということは出来ないってことだね
解決して何よりです。

722 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 14:32:41 ]
ソケット通信について質問します。
サーバー win-XP JAVAアプリ
クライアント Linux gccアプリ

コネクション成立後に、クライアント側から close → open する場合、
close後にopenするまでの待ち時間はどのくらいとればいいのでしょうか?

723 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 14:35:19 ]
別に待たなくて良い

724 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:02:38 ]
>>723
サーバー側で時々クライアントのソケット断検出がうまくいかない時があったものですから。
アプリケーションの不具合みたいです。
すみませんでした。

725 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:20:47 ]
生ソケ開いて

Macアドレスと
IPとポートでフィルタしようと
思うのですが、効率のいいアルゴリズム
知らないでしょうか?

726 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:02:29 ]
受信がうまくいかないのですが、
//送信
char szBuffer[1024];
char lpFileName[1024] = "/case.html";
sprintf(szBuffer, "GET %s HTTP/1.0\r\n\r\n",lpFileName);
nRet = send(Socket, szBuffer, (int)strlen(szBuffer), 0);

if (nRet == SOCKET_ERROR)
{
SendMessage(GetDlgItem(pval->hWndMain,IDC_EDIT2),\
EM_REPLACESEL,0,(LPARAM)"sendに失敗");
closesocket(Socket);
}
//受信
while(1)
{
nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0);
if (nRet == SOCKET_ERROR)
{
SendMessage(GetDlgItem(pval->hWndMain,IDC_EDIT2),\
EM_REPLACESEL,0,(LPARAM)"recvに失敗");
closesocket(Socket);
break;
}

if (nRet == 0)
break;
sprintf(szBuffer,"%s",szBuffer);
SendMessage(GetDlgItem(pval->hWndMain,IDC_EDIT2),\
EM_REPLACESEL,0,(LPARAM)(LPCTSTR)szBuffer);
}

727 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:15:55 ]
> sprintf(szBuffer,"%s",szBuffer);

( ゚д゚) !?

728 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:30:53 ]
>>725
bitmaskするだけだろ

729 名前:デフォルトの名無しさん [2008/01/22(火) 01:17:46 ]
動画にアクセスしたらzoomeのDQNは早い
70Mbpsぐらい出たよ インターネットなら
透過スピードに近いのではないだろうか?
www.lunascape.jp/community/
Lunascape Core Version 4.5.2.1 / ANSI
Operating System Version 6.0.6000
Internet Explorer Version 7.0.6000.



730 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 05:08:26 ]
bitmask?よくわからん?

731 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 20:55:45 ]
あきらめたほうがいいね

732 名前:デフォルトの名無しさん [2008/01/22(火) 21:06:04 ]
ソケットでの通信を行うときのバッファサイズについてなのですが、
イーサネットのフレームは最大1518バイトらしいので
バッファは1600バイト程度取っておけばいいんでしょうか?

733 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 21:15:05 ]
>>732
TCPのウィンドウバッファはもっと大きいよ。

734 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 17:41:26 ]
どのくらい取っておくのが普通?

735 名前:デフォルトの名無しさん [2008/01/23(水) 18:27:41 ]
>>734
TCPとかイーサネットとかの仕様は考えなくて良い。
自分で設計したプロトコルに基づいてバッファを決めるのが普通。
どうせ、recvでまとめて受信したり、分割して受信したりするんだから。

736 名前:デフォルトの名無しさん [2008/01/24(木) 14:50:24 ]
質問す。
ソケット繋がった状態で、LANケーブル抜いて、すぐ差し直して、まだソケット繋がったまま。
何故切断されない?

737 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 14:55:48 ]
TCPは送ったパケットが届かなくても何度か再試行するから、そのときに届けば問題なし

738 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 15:05:32 ]
>>736
そもそも下のレイヤの信頼性を補うためのプロトコルがTCPだ…

739 名前:736 mailto:sage [2008/01/24(木) 15:12:29 ]
>>737 >>738
あー、そっか・・・いいこという。



740 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 15:28:30 ]
WindowsでLANケーブル抜くと断線扱いで
まさに>>736のときネットワークが落とされるんだが
これはどうしたらいいかね

741 名前:736 mailto:sage [2008/01/24(木) 15:40:46 ]
>>740
それは回線切断を検知したというか、
LANケーブルが抜けたことを検知した、ってことかな。

742 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 22:19:21 ]
>>740
Windows で TCP/IP のメディア検出機能を無効にする方法
support.microsoft.com/kb/239924/ja

743 名前:デフォルトの名無しさん [2008/01/27(日) 15:31:55 ]
accept関数の宣言は /include/sys/socket.hでされてるのは分かったのですが
externされてて中身がどこで表記されてるのかが分かりませんでした。
どこに表記されているか教えてもらえないでしょうか…。

744 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 17:46:25 ]
UNIX系統なら、acceptの中身はシステムコール叩いてるだけだから、
カーネルに実体がある、といった方が良いのかな。

745 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 18:53:00 ]
詳解TCP/IP Vol.2だと、uipc_syscalls.cを見てるね。

746 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 08:04:18 ]
チャットプログラムを作ろうとしているんだけど
同時に複数のデータを送りたい場合はどういうやり方が常道なんだろう

具体的には発言者、発言内容、文字色のデータがあるとして
適当にカンマ区切りとかにして一回で送信するか
それぞれで三回送信した方がいいのか

747 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:03:48 ]
TCPなら3回に分けて送信したって区切りの代わりにはならんぞ
10バイトを3回送信しても30バイト一度に受信するかもしれんし1バイトずつ30回受信するかもしれんし
区切り文字でもいいけどデータサイズを前に付ける方がたぶん楽
カンマ区切りにするなら発言内容にカンマ含んでるときのことも忘れずに

748 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 12:38:43 ]
isprint()な文字しか投稿不可能なんだろうから、
ヌル終端に決めといて、最大サイズ制限あり。

発言者\0発言内容\0文字色\0

が簡単と思う。

送られたデータサイズは疑う必要があるから、
(分散システムでは、完全性の仮定レベルをかなり低くする必要がある)
データサイズが送られても、結局は同じ様なコードになる。
バッファ管理とか、タイムアウト処理とか。



749 名前:デフォルトの名無しさん [2008/01/28(月) 12:53:24 ]
質問なんですが、

select使って多重処理のサーバ作ってるのですが、
A、Bという二つのクライアントがサーバに繋がってるとして
Aから送った文字列に対してのレスポンスをAだけでなくBにも返す時ってどうすればいいんですか?

アドバイスだけでもお願いしますorz



750 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:02:15 ]
AとBの両方に同じものをsendすれば?

751 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 19:07:13 ]
ある装置で、クライアントで接続するTCPポートxxxxxと、サーバーで接続するTCPポートxxxxx + 1があって
装置から接続先に送るものを、クライアントとして接続したポートで送信し、接続先から装置に対して受信
するものをサーバーとして接続したポートで受信する仕様で通信しているのですが。
種類と発生タイミングの違う複数のデータに対して同じポートで送受信しないといけません。
送信するデータは応答を返すのですが、送信するポートと別のポートで応答を受信するような感じです。
糞仕様にしか思えないのですが、こういうのもありなんでしょうか?







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<263KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef