Come fare in modo che un Winsock ascolti su una porta particolare?
Domanda
Questo deve essere davvero ovvio, ma come posso fare in modo che un winsock ascolti una porta specifica (riceva i dati?) Non riesco a trovare un metodo che mi permetta di farlo!
Mi dispiace che questo sia probabilmente così ovvio.
Sto cercando di creare un'applicazione di chat, che ovviamente è in esecuzione in una configurazione server / client.
Soluzione
vincola il socket, e quindi ascolta e accetta connessioni. Descritto più in dettaglio in Introduzione a WinSock . C'è anche una buona guida alle prese BSD, che dovresti leggere anche tu
Per .NET, probabilmente vuoi Sistema. Net.Sockets.Socket (ed è metodi Bind / Listen / Accept / Send / Receive) anziché WinSock nativo, ma i concetti sono gli stessi, quindi lascerò tutti i link.
Altri suggerimenti
Quando si utilizzano socket TCP che si associano, ascoltare e accettare e infine recv. Puoi trovare alcuni tutorial su qui o consultare la documentazione ufficiale MSDN.
L'API winsock si basa sui socket BSD di UNIX; quindi sono molto simili. Potresti voler esaminare questo. Un libro che ho recentemente è Programmazione di rete UNIX di Richard Stevens e lui spiega praticamente tutto quello che c'è da sapere sui socket.
Potresti anche considerare di far funzionare i tuoi socket in un thread separato per migliorare la leggibilità e le prestazioni.
Modifica: come per l'ascolto su una porta specifica; questo è il parametro sin.port della tua struttura SOCKADDR_IN.