- ベストアンサー
UDP通信のbind関数について
- UDP通信におけるbind関数の設定内容は、自分側のIPとポート番号を指定します。
- UDP通信において、bindは受信待ちをする場合に必要ですが、送信だけの場合は不要です。
- bind関数の理解について、質問者が疑問を持っていることがわかります。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- TCP及びUDP通信について
TCP及びUDP通信について 現在WinSockAPIを用いた通信を行うプログラムを組んでいます。 しかしながらネットワークに関しては初心者で、わからない点がいくつか出てきたので質問させて頂きます。 -------------------------------------------------- 1.TCPで双方向通信を行う場合、サーバ側は指定したポートにbind→listenし、接続を待ち受けます。 クライアント側はサーバのIPを指定し、接続確立後にポートはOSが自動で割り振ると聞きました。 つまり、クライアント側がポートを開放せずに通信が出来るのは、OSなどが自動でポートを割り当て、割り当てたポートに到着したデータを該当アプリケーションに渡すからでしょうか? ポート関連は全てルータが管理しているものだと思っていたのですが、OSがポートを割り当てるという動作がよく理解できません。 -------------------------------------------------- 2.UDPで双方向通信を行う場合、端末A・端末Bともに指定したポートにbindする必要があると聞きました。 つまり、UDPで双方向通信を行う場合、端末A・端末Bの双方でポートを開放する必要があるということでしょうか? -------------------------------------------------- 是非ともご教授ください。
- 締切済み
- その他([技術者向] コンピューター)
- winsockを使ったTCP及びUDP通信について
今回winsockを使った通信プログラムを組む事になったのですが、わからない点が多々ありましたので、どなたかご教授頂けると大変ありがたいです。 1. TCP通信において、送信側が"Hoge" "Fuga"と2回sendした際、受信側でrecvすると"Ho" "geFu" "ga"と3回受信する可能性があると認識しているのですが、これは正しいでしょうか? (到着する順序は保証されるが、recvする際に送信側がどのようにsendしたかは考慮されない) 2. UDP通信においては、上記のような現象は起きないと認識しているのですが、これは正しいでしょうか? (UDP通信では、2回sendすれば2回以上はrecvしない。パケットの破棄はあっても、分割はない) 3. もしUDP通信でも上記のような現象が起きる場合、到着順序の保証がされないという観点から、recvした際に"Ho" "ga" "geFu"と受信する事はあり得るのでしょうか? 4. 2が正しい前提での話です。UDP通信では、MTUを超えた場合、自動でパケットが分割されると聞きました。プログラムを組む際、これは意識しないといけないのでしょうか? (MTUが1500Byteの場合、UDPで2000Byteをsendすると、recvで1500,500と2回受信する?) 以上の4点です。 どなたかご存知の方いらっしゃいましたら、是非ご教授ください。
- 締切済み
- C・C++・C#
- UDPのソケットプログラミング
ソケットプログラミングでの質問です. 初心者です. UDPクライアントで sock = socket(PF_INET,SOCK_DGRAM,0) でUDPソケットを生成した後に bind()なしで,UDPサーバ宛にsendto() を行った場合, サーバのrecvfrom()でクライアントの IPアドレスとポート番号が受け取ることができると思いますが ここでのIPアドレスはクライアントのアドレスで, ポート番号は他のクライアントの他ソケットが使用していないポート番号 が受け取ることができると考えてよろしいですか? クライアントのsendto()で自動的にポート番号が割り当てられるが, クライアントが,どのポートから送信したのかを知る方法はないですか?
- ベストアンサー
- C・C++・C#
- bind()を呼び出さなくてもよい理由
開発言語:C soccket(AF_INET, SOCK_DGRAM, 0)での通信時 サーバ側ではrecv()を行なうためにはbind()しますが、 クライアント側では、send()を行なうために明示的にbind()を行なわずにプログラムが動作しています。 この動作理由を教えて頂けませんか。 また、クライアント側において送受信を行なう場合にはsend()を呼び出した後に、 recv()を呼び出す場合にはbind()を必要としないプログラムを見た事あるのですが、 その動作理由が分かりません。 これについても合わせて教えて頂けると助かります。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- TCP/IPにおける端末間の通信について(NAPT)
TCP/IPにおける端末間の通信について(NAPT) お世話になります。 TCP/IPについて質問です。 NAPT機能の付いたルータを介し、インターネット越しに通信を行う場合を想定します。 1.端末A(送信側)から端末B(受信側)にTCPあるいはUDPを用いてデータを送信する場合、端末Bでは必ず待ち受けるポートにbind(listen)し、また端末Aでは指定されたポート宛てにデータを送信する必要があると聞きました。 ここまでは理解できますが、ここにNAPT機能の付いたルータが介入する場合、"例外なく"端末B側のルータでポートマッピングを行う必要があるのでしょうか? 2.上記の認識がもし正しい場合、2台の端末で通信を行う場合は少なくとも片方でポートマッピングが必要ということになります。 だとするならば、SkypeやMSNメッセンジャーなどのクライアント側でポートマッピングが必要のないアプリケーションは、必ずサーバを介した通信を行っているということでしょうか? Skypeなどの仕組みを説明しているサイトを見ると、接続の手順を踏んだのちに端末間で通信を行うとの記述があるのですが、いくら接続先のIPがわかっていても、アプリケーション間で接続を確立するには、片方でポートマッピングが必要になると思うのですが、これはどういうことなのでしょうか? 3.上記の認識が正しい場合、UDPで受信する為には必ずポートマッピングが必要ということになります。 だとするならば、クライアント側でポートマッピングが必要のないアプリケーションは、少なくとも受信にはUDPを用いていないということでしょうか? 以上の3点についてお答え頂けると幸いです。 回答お待ちしています。
- 締切済み
- ネットワーク
- UDPのポート53の通信が多い
Linuxを接続しているルーターが、そのルーターのWAN側と接続しているルーターにUDPのポート53でパケットを飛ばします。 そしてそのルーターからLinuxを接続しているルーターへと返事が帰って来ているみたいです。 この通信がとても多く発生しています。 Linuxで設定が足りなかったり設定が間違っていたりしている可能性はありませんか?
- 締切済み
- Linux系OS
- UDP通信について
はじめまして。 UDPの通信について教えて下さい。 送信元ポートと宛先ポートについてです。 機器A-機器Bで通信をする場合です。 両方の機器で同じアプリ(ポート番号10000)が起動しているとします。 機器Aから機器Bのアプリに対してフレームを送信した時、 送信元ポートはランダムな値(仮:5000)で宛先ポートは10000になると思います。 機器Bでフレームを受信した後、応答フレームを送信する時には 送信元ポート10000、宛先ポート5000になると思います。 機器Aで起動しているアプリのポート番号は10000ですので機器Bからの応答フレームの宛先ポート5000とは一致しません。 この場合、どのようにソフトは判断しているのでしょうか? 組み込みで評価ボードに同じアプリを実装してお互いに通信させるのが 目的です。
- 締切済み
- ネットワーク
- UDP/IPでのソケット作成について(winsock)
UDP/IPでのソケット作成について(winsock) 開発環境VC++.NET、O/S WIN2000にてソケットプログラミング(winsock2.0)をしています。 コンソールプログラミングではありませんが、WindProcは持っていません。 UDPサーバーを作り、複数クライアントの対応をしたいと考えています。 クライアントAからの通信やりとり中に クライアントBからの通信がきたら、そちらとも通信やりとりを(自動で)行いたい。 ここで問題なのが、クライアントAの要求ポートが15000で、 クライアントBの要求ポートも15000なのです。 同じ既に開いているポートでソケット作成しようとしても、socket()関数はエラーを返してくるのですが、 やり方を工夫すれば、同一ポートでの複数クライアント対応は可能なのでしょうか。不可能なのでしょうか。 可能であれば、やり方、ヒント等教えてください。よろしくお願いします。 追記 (1)TCP/IPでは、同一ポートでソケット作成が可能でした。ネットで探したサンプルプログラムが そのような動きをしていたのですが、UDPに書換えることはできませんでした。 http://eternalwindows.jp/network/winsock/winsock04s.html (2)UNIXの場合fork()処理後に socket()作成 → bind()で同一ポートでの複数クライアント対応が 上手くいくらしいのですが、Windowsではマルチスレッド等をうまく活用すれば、 fork()と同様の処理が可能になり、目的が達成できるでしょうか。
- ベストアンサー
- C・C++・C#
- UDPについて
SOCKETを使ってUDPの通信プログラムを勉強中なんですが sendto(),bind()ではstruct sockaddr_in型の構造体を渡しますよね。その中の sockaddr_in.sin_addr.s_addr はIPアドレス(コンピュータ名)をバイナリ化したデータですよね。これって、sendとreceiveそれぞれでどのような役割をしているのでしょうか。 また、sendto()はデータを送信しているんですよね。receive側ではreceiveする前にbindしなくちゃいけないみたいなんですが、そもそもbind()って何をしてるんでしょうか。 よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- UDP通信する時に、相手にどうやって自分のポート番号を教える?
UDP通信する時に、相手(送信側)にどうやって自分(受信側)のポート番号を教えるのでしょうか? 例えば、下記のページのサンプルだと、受信側は5555で待ち受けていますが、この場合は送信側はあらかじめ受信側が5555で待ち受けていると知っています。送信側が知らない場合に、どうやって受信側のポート番号を知らせればよいのでしょうか? http://www.hellohiro.com/datagram.htm
- ベストアンサー
- Java
お礼
質問した後、実は試しに相手側のIPやポート番号を設定するなど、色々なことを調べていました。回答が遅くなり申し訳有りません。 試した結果、相手側のIPやポートを設定すると、bindでエラーが帰ってきて、自動で自分のIPやOS割り振りのポート番号が設定されました。(Win2008server VC2010) 他にもワイヤーシャークにご登場願い、気になる箇所を色々と調べて勉強することが出来ました。 的確な回答ありがとうございます。 ベストアンサーとさせていただきます。