2014-02-13 7 views
0

Пожалуйста, извините меня, поскольку я не могу задать вопрос, не изображая мой сценарий. Мой сценарий описан ниже,Несколько портов с несколькими гнездами или несколько гнезд для нескольких портов для отправки и возврата

У меня есть две машины machine1 и machine2, имеющие свой собственный IP-адрес. Теперь я хочу обмениваться сообщениями между ними, я хочу отправить сообщение machine2 из amachine1 в один порт, скажем 50, и вернуть сообщение с машины2 на номер порта 51. Как я могу реализовать это, я в замешательстве, создавать ли два гнездо для отправки и возврата в каждую машину? или просто разные порты будут выполнять эту работу. Я использую язык C и Ubuntu linux. Заранее спасибо.

   MACHINE1         MACHINE2 
        |           | 
        |     sendto     | 
       port 50 ----------------------------------> | 
        |           | 
        |    recvfrom     | 
       port51 <-------------------------------- | 
        |           | 
        |           | 

ответ

1

Если вы просто хотите отправлять и получать данные, будет выполняться соединение TCP/IP. Вам нужно выбрать одну из этих машин, чтобы быть сервером, например, один будет прослушивать порт 50 (сервер), и клиент подключится к нему.

Вы также можете использовать UDP и использовать тот же порт на двух разных машинах. Это вопрос выбора, и это зависит от того, что вы собираетесь делать в своем приложении.

С TCP:

Machine 1 - прослушивает порт 50

Machine 2 - Подключается к MACHINE1: 50

С связи с этим, вы можете отправлять и получать данные.

С UDP:

машина 1 - Связывает порт 50

Machine 2 - Связывает порт 50

IP-машины 1 и 2 машины различны. Теперь вы можете отправлять и получать данные из комбинированного IP: порта.

Вы можете найти здесь примеры (TCP/IP): http://www.thegeekstuff.com/2011/12/c-socket-programming/

и UDP, здесь: http://gafferongames.com/networking-for-game-programmers/sending-and-receiving-packets/

Что касается количества розеток, требуется один разъем для каждой стороны соединения, или один на машину, на вашем примере. Когда вы открываете сокет, вы можете отправлять и получать данные. Мы говорим, что соединение двунаправлено.

+0

В любом случае это не клиентское серверное приложение. – Puneeth

+0

Клиент и сервер - это роли, которые мы определяем в протоколе связи. Если вы используете UDP, вам действительно не нужно решать, кто является сервером. Но для TCP/IP это важно. Когда вы подключаетесь к другой машине, вы являетесь клиентом, а другой - вашим сервером. Роль сервера - принимать соединения с клиентских компьютеров. – nmenezes

0

Если вы хотите использовать два порта, вам понадобятся два разъема в Machine1. В первом сокете вы отправляете данные в Machin2. Во втором гнезде вы будете слушать порт 51 и сообщение recv.

Также можно использовать только один порт, В этом случае один сокет будет выполнять как отправку, так и возврат на Machine1.

Смежные вопросы