Newsgroup: it.comp.programmare.win32
Titolo: E' bravo chi riesce a rispondermi

Il problema riguarda la programmazione dei sockets.
Ecco il listato trovato su una guida :
#include <winsock2.h>
#include <windows.h>
struct sockaddr_in sin;        //  a cosa serve questa struct ?
WSADATA wsaData;
WORD version;
int error;
int lenght;
SOCKET server;
SOCKET client;
int main()
{
version= MAKEWORD(2,0);
error = WSAStartup(version,&wsaData);
if (error!=0) {
  return FALSE;
 }
 if (LOBYTE(wsaData.wVersion) !=2 ||
  HIBYTE(wsaData.wVersion) !=0) {
  WSACleanup();
  return FALSE;
 }
server = socket(AF_INET,SOCK_STREAM,0);
memset(&sin,0,sizeof sin);     // fin qui tutto ok
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;         // cos'è INADDR_ANY ?
                                                                     //
perchè sin_addr.s_addr =
                                               // e non semplicemente
sin_addr?
sin.sin_point = htons( 21 );         // questo a che cacchio serve? Il
                                                      // compilatore mi dice
che sin_point
                                                      // non è dichiarato ,
e htons() ??
if ( bind(server,&sin,sizeof sin) == SOCKET_ERROR) {
 return FALSE;
}
while(listen(server,SOMAXCONN) == SOCKET_ERROR){
lenght = sizeof sin;
client = accept(server,&sin,&lenght);
}
closesocket(server);
WSACleanup();
return 0;
}
Il programma è un programma server che dovrebbe mettersi in ascolto ,in
attesa della connessione di un client ,su una qualche porta, anche se non ho
capito dove viene specificata la porta . Ciò che principalmente non ho
capito è il modo in cui vengono riempite le variabili della struttura "sin".
Ho provato a vedere su MSDN ma non ho trovato nulla a parte la dichiarazione
della struttura che a me sembra un pò diversa dall'implementazione che ne fa
questo listato.
C'è un'altro problema. Sostituendo sin_point con sin_port ( pensando che
fosse un errore di stampa ) sono riuscito a far compilare il programma al
compilatore ma durante il linkaggio mi appaiono i seg errori:
wosa.obj : error LNK2001: unresolved external symbol __imp__closesocket@4
wosa.obj : error LNK2001: unresolved external symbol __imp__accept@12
wosa.obj : error LNK2001: unresolved external symbol __imp__listen@8
wosa.obj : error LNK2001: unresolved external symbol __imp__bind@12
wosa.obj : error LNK2001: unresolved external symbol __imp__socket@12
wosa.obj : error LNK2001: unresolved external symbol __imp__WSACleanup@0
wosa.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8
Debug/wosa.exe : fatal error LNK1120: 7 unresolved externals
Grazie per le risposte
Ciao

Debug/wosa.exe : fatal error LNK1120: 7 unresolved externals
Qui sta il casino. Ti manca la libreria per linkare il codice.
Ma si può creare (Con BCB l'ho fatto, ma non ricordo come)
Carlo Pellegrini
### Remove NOSPAMPLEASE to answer ###

Debug/wosa.exe : fatal error LNK1120: 7 unresolved externals
La correzione effettivamente e` come hai pensato tu, l'unica cosa che ti
manca e` andare nei settings del progetto ed aggiungere
alle librerie wsock32.lib, ogni volta che ricevi un msg di errore di questo
tipo (unresolved externals) significa che 1) hai chiamato una funzione tua
che ti sei dimenticato di scrivere 2) il nostro caso, non hai detto al
compilatore dove trova le funzioni
Filippo Grassilli

 Ma si può creare (Con BCB l'ho fatto, ma non ricordo come)
implib wsock32.lib wsock32.dll
Ciao
    Fabio