2013-06-22 1 views
1

Я работаю над проектом сокета, и теперь я сделаю прослушиватель UDP для серверной части. Я посмотрел несколько примеров, и я не могу понять это; Почему мы должны связывать UDP-сокет как «socket.Bind (новый IPEndPoint (IPAddress.Any, 3000));»? А именно: в сокете TCP мы связываем только наш локальный ip, но в соке UDP мы привязываем IPAddress.Any. Почему мы это делаем?UDP Socket Bind Any IP? (Подстановочный знак - Частный)

EDIT: Каковы подстановочные знаки и конкретные IP-адреса? Как мы можем их использовать?

+0

Я думаю, что это [статья] (http://bert-hubert.blogspot.com.es/2012/10/on-binding-datagram-udp-sockets-to-any .html) может прояснить ЛЮБОЙ для UDP. –

+0

'В сокете TCP мы привязываем только [к] наш локальный IP' неверно. Вы обычно связываете прослушивающий сокет с ЛЮБОЙ. Не настоящий вопрос. – EJP

+0

@ EJP OK. Мне нужно понять, почему нам нужен пользователь ANY Ip или специальный Ip. Вы можете мне помочь? –

ответ

1

Я нашел это, и я думаю, что я искал его :)

Подстановочного это специальный локальный IP-адрес. Обычно это означает «any», и может использоваться только для операций привязки.

Значение этого IP-адреса 0.0.0.0. Если у вас есть два сетевых адаптера , один с IP-адресом 1.1.1.1 и один с IP-адресом 2.2.2.2, , то вы можете создать прослушивающий сокет и связать его с 1.1.1.1, чтобы сокет не привязывался к 2.2. 2.2. Вы также можете создать сокет для прослушивания и привязать его к 2.2.2.2, чтобы он не привязывался к 1.1.1.1. Если вам все равно и хотите, чтобы ваш сокет привязывался ко всем сетевым картам, , вы привязываете его к подстановочному адресу.

Другим специальным значением будет 127.0.0.1, что означает, что только клиенты на тот же компьютер может подключиться к вашему серверу.

Ссылка: What does wildcard address in InetSocketAddress mean?

0

Вы можете связать как сокеты TCP, так и UDP с подстановочным адресом (INADDR_ANY или IN6ADDR_ANY_INIT) или по определенному адресу. Нет причин, по которым вы обычно привязываете TCP-сокет к определенному IP-адресу, в то время как вы связываете сокет UDP с подстановочным адресом.

+0

Я думаю, что должна быть причина. Я жду его ... –

+1

Конечно, есть причины, по которым вам нужно привязываться к подстановочному адресу или конкретному адресу, но они не имеют никакого отношения к тому, используете ли вы TCP или UDP. Это действительно ортогонально ... – Celada

+0

OK. Можешь сказать мне? Почему мне нужно использовать подстановочный знак и почему мне нужен конкретный адрес? –