C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: TCPの通信について


(過去ログ 35 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■17660 / inTopicNo.1)  TCPの通信について
  
□投稿者/ 出水 (40回)-(2008/04/29(Tue) 23:48:04)

分類:[ネットワーク全般] 

2008/04/30(Wed) 00:37:41 編集(投稿者)

TCP通信プログラムについて、是非について問われたので識者の方に聞きたいです

開発環境はVS.NET(2002)でWinsock1.1を使っています

サーバ側はパケットの終端として切断処理を行っています
(sendしてすぐにshutdown/close)
クライアント側はrecv()==0を契機に終端とみなし、後続処理を行っています

TCPの性質上、すべてのパケットを送信した上でシャットダウンを行うとなっているので
この方法でも問題は起きないと思うのですが、問題ない使い方といえるのか教えてください

---
4/30 0:36 開発環境を追記
引用返信 編集キー/
■17661 / inTopicNo.2)  Re[1]: TCPの通信について
□投稿者/ ネタ好き (180回)-(2008/04/30(Wed) 00:10:14)
No17660 (出水 さん) に返信
> TCP通信プログラムについて、是非について問われたので識者の方に聞きたいです
>
> サーバ側はパケットの終端として切断処理を行っています
> (sendしてすぐにshutdown/close)
> クライアント側はrecv()==0を契機に終端とみなし、後続処理を行っています
>
> TCPの性質上、すべてのパケットを送信した上でシャットダウンを行うとなっているので
> この方法でも問題は起きないと思うのですが、問題ない使い方といえるのか教えてください

提示されている情報が少なすぎて、前提が分からないのですが、
プログラムがその様になっていれば問題ないのでは?
引用返信 編集キー/
■17662 / inTopicNo.3)  Re[2]: TCPの通信について
□投稿者/ ネタ好き (181回)-(2008/04/30(Wed) 00:20:47)
もしかして、TCPは信頼性が高い通信だから、全データが送られる事を前提として設計しても大丈夫かと聞いているのかな?
そうだとするのならば問題あります。
先ず考えられるのはサーバーが途中で落ちたらどうするの?と言うことです。
サーバーが落ちる原因が色々ありますから全て送りきれると思うのは大間違いです。
引用返信 編集キー/
■17664 / inTopicNo.4)  Re[2]: TCPの通信について
□投稿者/ 出水 (41回)-(2008/04/30(Wed) 00:21:49)
×××に違反している、とかTCP上で動く×××は切断を終端とみなしたプロトコルで前例があるとか
そういう情報があればなぁと思っています
引用返信 編集キー/
■17667 / inTopicNo.5)  Re[3]: TCPの通信について
□投稿者/ 出水 (42回)-(2008/04/30(Wed) 00:25:41)
>先ず考えられるのはサーバーが途中で落ちたらどうするの?と言うことです。

その場合って、recv関数は負の値を返しませんか?
recv関数が0を返しているのにすべてのパケットが送信されてないならば
はっきりと問題があるといえるので、そういう例があるということでしょうか

書き忘れましたが、recvはブロッキングモードで動作しています
引用返信 編集キー/
■17668 / inTopicNo.6)  Re[4]: TCPの通信について
□投稿者/ ネタ好き (182回)-(2008/04/30(Wed) 00:28:14)
2008/04/30(Wed) 00:42:48 編集(投稿者)

No17667 (出水 さん) に返信
> >先ず考えられるのはサーバーが途中で落ちたらどうするの?と言うことです。
>
> その場合って、recv関数は負の値を返しませんか?
> recv関数が0を返しているのにすべてのパケットが送信されてないならば
> はっきりと問題があるといえるので、そういう例があるということでしょうか
>
> 書き忘れましたが、recvはブロッキングモードで動作しています

そもそもどの開発環境なのか情報が無いので全然分かりません。
それに質問の趣旨が分かりません。
API(Berkeley?)の挙動ならばマニュアルを読めばいいと思います。
引用返信 編集キー/
■17670 / inTopicNo.7)  Re[1]: TCPの通信について
□投稿者/ も (17回)-(2008/04/30(Wed) 01:16:53)
No17660 (出水 さん) に返信
> 2008/04/30(Wed) 00:37:41 編集(投稿者)
>
> TCP通信プログラムについて、是非について問われたので識者の方に聞きたいです
>
> 開発環境はVS.NET(2002)でWinsock1.1を使っています
>
> サーバ側はパケットの終端として切断処理を行っています
> (sendしてすぐにshutdown/close)
> クライアント側はrecv()==0を契機に終端とみなし、後続処理を行っています
>
> TCPの性質上、すべてのパケットを送信した上でシャットダウンを行うとなっているので
> この方法でも問題は起きないと思うのですが、問題ない使い方といえるのか教えてください
>
> ---
> 4/30 0:36 開発環境を追記
問題ない使い方と言ってほしいようなので,問題ないと言ってみます.
ただ,「アプリケーション上の通信の開始/終了」と「TCP通信の開始/終了」が微妙に混同されているようなので,
棲み分けをキッチリしておいたほうがいいかもしれません.
引用返信 編集キー/
■17673 / inTopicNo.8)  Re[2]: TCPの通信について
□投稿者/ ネタ好き (183回)-(2008/04/30(Wed) 01:56:05)
出水さんへ
設計しだいだと思います。
ネットワークには様々なトラブルがつき物ですので、
それに正しく対応できるように、設計しているか否かが明暗になると思います。
.NETの場合は例外処理を上手く使うと良いと思います。
引用返信 編集キー/
■17678 / inTopicNo.9)  Re[3]: TCPの通信について
□投稿者/ 出水 (43回)-(2008/04/30(Wed) 03:19:35)
>問題ない使い方と言ってほしいようなので,問題ないと言ってみます.
できれば、FINの送信を終端としている前例など、問題ない根拠が欲しかったですが
問題ありの根拠が特にないということで解決済みとしておきます

>ネタ好きさん
「んなこたー、俺が言いたい事なんじゃーー」ってことで
解決済み
引用返信 編集キー/
■17679 / inTopicNo.10)  Re[4]: TCPの通信について
□投稿者/ れい (515回)-(2008/04/30(Wed) 03:38:16)
2008/04/30(Wed) 03:38:55 編集(投稿者)

No17660 (出水 さん) に返信
> TCPの性質上、すべてのパケットを送信した上でシャットダウンを行うとなっているので
> この方法でも問題は起きないと思うのですが、

まず、この日本語の意味が私にはわかりません。

> サーバ側はパケットの終端として切断処理を行っています
> (sendしてすぐにshutdown/close)
> クライアント側はrecv()==0を契機に終端とみなし、後続処理を行っています

状況によりますが、一般的な設計方針でいうなら、「問題あり」です。
一般的に望ましいTCPの切断方法は…

送信を終えたい側は
・shutdownをSD_SENDで呼ぶ。
・resvが0を返すまで受信し続ける。
・closeする。

送信が終わったことを伝えられる側は
・resvが0を返すまで受信する。
・shutdownをSD_SENDで呼ぶ。
・closeする。

です。
これ以外の方法では全てのデータが伝達されない場合があります。

引用返信 編集キー/
■17726 / inTopicNo.11)  Re[5]: TCPの通信について
□投稿者/ 出水 (44回)-(2008/04/30(Wed) 20:05:34)
送信を終える側はshutdownの相手からの応答を受けるべきですね
切断系は上のレイヤーで切断要求送っているのしか作ったことがないので
ちゃんとした切断は知らなかったので助かりました
ありがとうございます
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -