2012-03-13 15 views
3

私はちょうどソケットプログラミングについて学び始めました。以前見たコンセプトに慣れましたが、かなり混乱しました。「コネクションレスで接続されていない」接続

UDP接続は「コネクションレスで接続されていない」接続のようです。

「コネクションレス型」と「未接続型」は冗長ではありませんか?

接続は4種類ありますか?

  1. コネクション、
  2. 未接続のコネクション、すなわち

  3. 接続指向
  4. 未接続の接続指向を接続し、

を接続し、最終的には、どのように、」コネクションレスすることができます接続されていない "接続機能?それは暴言ではありませんか? lol

答えて

5

実際、UDP接続などはありません。基本的に、UDPはFire and Forthプロトコルで、データのパケットをマシンに送信します(最初に接続を確立する必要はありません)。そして、他のマシンがそれらを受け取ることを望みます。

「ソケット接続」を確立すると、魔法は発生しません。つまり、あなたとリモートクライアントの間のワイヤーが色などを変えることはありません。接続中に何が起こるかは、両側が所定のプロトコルでインターネットを介してデータを確実に送受信することに合意していることです。両方のマシンが特定の方法に従うことで合意したため、接続では完全性と順序(およびその他のもの)を保証することができますが、インターネット経由で物事を送受信するために何かに接続する必要は絶対にありません。

「コネクションレスで接続されていない」ソケットはありません。だれかがあなたに言ったのはおそらくUDPの非接続性の側面を強調しようとしているだけかもしれません。

+2

+1すばらしい答え! –

0

ええ、技術的にUDPは接続しません。ただし、コードがパケットを送信するために使用するローカルUDPソケットに接続している可能性があります。

+0

コードには、ソケット、またはソケットハンドルまたはfdがあります。そこには「接続」はありません。 – EJP

1

UDPソケットを使用すると、TCPソケットと同様にサーバーに接続できます。しかし、sendto機能を使用して、接続せずにパケットを直接サーバーに送信することもできます。

9

技術的には、UDPソケットでconnect()と呼ぶことができます。この場合、ソケットはピアアドレスを記憶しているので、sendto()の代わりにsend()またはwrite()のシステムコールを使用してデータグラムを送信することができます。また、ソケットはそのピアからのデータグラムだけを受信し、他のピアからのデータグラムは破棄されます。

「接続なしの接続」ソケットと呼ばれるものがあります。これは、UDPソケットでconnect()呼び出しが呼び出されたことを意味します。

関連する問題