2012-03-20 4 views
14

Ho un'applicazione client che viene eseguita come applet Java dal browser di un utente e si connette a un server tramite una determinata porta. Il server è in esecuzione su un cloud accessibile pubblicamente. Sulla base della mia esperienza precedente di scrittura del codice socket, posso decidere un numero di porta casuale (ad esempio 5999) e usarlo per la comunicazione con il client server. Tuttavia in questo caso il client può essere qualsiasi macchina utente e ci possono essere molti utenti che accedono al server.Come decidere il numero di porta tra la comunicazione client e server su internet

Quindi la domanda è come assicurarsi di utilizzare un numero di porta che è meno probabile che venga utilizzato da qualsiasi altro servizio sul computer del cliente.

Ho anche esplorato protocolli basati su webservice per questo scopo ma non l'ho usato per il motivo che il mio requisito è molto semplice e può essere soddisfatto con una semplice comunicazione socket e un protocollo personalizzato. Sento che gli strumenti di webservice e cose come SOAP, CORBA sono troppo pesanti.

risposta

8

Scegliere uno che non è nel Service Name and Transport Protocol Port Number Registry e sperare per il meglio.

Inoltre, un client può connettersi a molti server sulla stessa porta. Quando i client si connettono, useranno una porta a caso alla fine.

Solo il server deve preoccuparsi dell'utilizzo di una porta libera e i client devono sapere qual è questa porta altrimenti non potranno connettersi al server.

+0

Grazie per gli input, stavo dando per scontato che il client si leghi anche su quella porta e quindi se la porta è occupata da un'altra applicazione, il client non riuscirà a comunicare. – Shyam

+0

@TimeKeeper Non sono sicuro di questa modifica nel collegamento. Una sorta di negazione del punto che stavo cercando di fare. Sì, potrebbe esserci una lista "ufficiale", ma alla fine della giornata, ciò non significa squat. Non c'è nulla che fermi un servizio usando (più o meno) qualsiasi porta e bloccando qualche altro servizio che vorrebbe usare quella porta. Sarebbe stupido supporre che il tuo programma sarà sempre in grado di collegarsi a una determinata porta fissa da ascoltare. – thecoshman

+0

Il tuo punto è valido e conservato con la tua frase "spero per il meglio". Tuttavia, dal momento che stiamo parlando della lista di porte conosciute, possiamo usare quella reale invece dell'approssimazione di Wikipedia, quindi il tuo suggerimento di scegliere una porta non sulla lista è più utile. –

2

Non è necessario scegliere un numero di porta sul PC dell'utente. Solo la porta del server deve essere un numero specifico.

Quando il client si connette ai server IP e numero di porta, il sistema operativo sceglie una porta libera a caso per il client stesso.

0

ci sono molti loro come @thecoshman menzionato, e ho compilato alcuni di loro per una rapida :)

258, 285, 325-332, 334-343, 703, 708, 717-728, 732 -740, 743, 745-746, 755-757, 766, 768, 778-779, 781-785, 787, 788-799, 803-809, 811-827, 834-846, 849-852, 855-859 , 863-872, 874-885, 889-899, 904-909, 914-952, 954-988, 1002-1007, 1009, 1491, 2194-2196, 2259, 2369, 2378, 2794, 2873, 3092, 3126 , 3301, 3546, 3694, 3994, 4048, 4144, 4194-4196, 4198, 4315, 4317-4319, 4332, 4337-4339, 4363-4365, 4367, 4380-4388, 4397-4399, 4424, 4434-4440 , 4459-4483, 4489-99, 4501, 4503-4533, 4539-4544, 4560-4562, 4564-4565, 4571-4572, 4574-4589, 4606-4620, 4622-4657, 4693-4699, 4705-4710 , 4712-4724, 4734-4736, 4748, 4757-4773, 4775-4783, 4792-4799, 4805-4826, 4828-4836, 4852-4866, 4872-4875, 4886-4893, 4895-4898, 4903-4911, 4916-4935, 4938-4939, 4943-4948, 4954-4968, 4972-4979, 4981-4983, 4992-4998