質問いたします。
C言語でプログラムを2つ(クライアント、サーバ)起動して最初にTCPかUDPのどちらかで通信を行い
文字列を送受信するシステムを作成したいのですが、
クライアント側・サーバ側でTCP通信中(UDP通信中)にUDP通信(TCP通信)に切り替えることは可能でしょうか。
OSはLINUX、コンパイラはGCCです。
ご回答、宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
まずはTCPのみ、UDPのみのsocketプログラミングを試されたうえ、判断されては如何でしょうか。
TCPとUDPのsocketをプログラムが持ってハンドリングすることは可能ですが、開発や保守面で複雑なものになるかと思います。
・UDPはセッションを必要としない通信ですが、仮にパケットロストなど発生した場合にプログラム側の対応が必要となります。
・TCPはセッションを確率したうえの通信となるのでパケットエラー等の補完もドライバ側で行われます。(それでもエラーハンドリングは必要になりますが)セッションを張る分、TCPよりも負荷・リソースは大きくなりますが影響は接続数、通信量によります。
質問に反しますが,TCP/UDPの特性を調べられたうえでどちらかに統一された方が良いかと思います。
投稿2014/11/08 02:03
総合スコア1339
0
C言語とかLinuxとかはあまり関係のない話しだとは思いますが、サーバ側についてはTCPとUDPの両方を待ち受けた状態にしておくのが現実的だと思います。
クライアント側は同時に接続でも切断して接続しなおすでもどちらでもいいとは思いますが、切り替えが可能かどうかであれば可能だと思います。
投稿2014/11/06 22:14
総合スコア1356
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/11/08 10:58
2014/11/08 11:26
2022/07/15 00:35
0
ポートが空いているならばマルチスレッド、マルチプロセスで並列処理すること自体できるはずです。もっとも、通信途中に(リトライせずに)途中までのデータを引き継いで方式を切り替えるならば、かなりの難度だと思いますが。
投稿2017/02/03 14:39
総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
追記の内容については、具体的にどこまで動いているのかわからないとなんとも言えません。
また、具体的なコードやパケットキャプチャデータがないと、原因の特定は難しいです。
投稿2014/11/10 04:13
総合スコア1356
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/11/10 13:53
2014/11/10 22:46
2014/11/10 23:03
2014/11/12 12:06
2014/11/12 12:23
2014/11/13 10:32
2014/11/17 06:30
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。