PDA

Visualizza la versione completa : [c]problema socket


killerbomb
21-12-2008, 16:50
nn riesco a compilare il codice per realizzare un socket client come posso risolvere?:

#include <windows.h>
#include <winsock.h> //includo le varie librerie tra cui quella winsock
#include <stdio.h>
int main()
{
SOCKET sock; // creo la socket chiamato sock che userò nella connessione
struct sockaddr_in sock_addr; // inizializzo la socket
WSADATA data; // inizializzo la variabile che contiene le primitive di Winsock
WORD p;
p=MAKEWORD(2,0); // creo la variabile p che contiene la versione della wsock32.dll
WSAStartup(p,&data); // inizializzo la wsock32.dll verificandone la mancanza di errori

sock=socket(PF_INET,SOCK_STREAM,0); // creo la socket indicandone le caratteristiche
sock_addr.sin_family=PF_INET; // indico il protocollo utilizzato (TCP/IP)
sock_addr.sin_port=htons(21); //indico la porta a cui connettere la socket
sock_addr.sin_addr.S_un.S_un_b.s_b1=127; // indico l'indirizzo IP
sock_addr.sin_addr.S_un.S_un_b.s_b2=0;
sock_addr.sin_addr.S_un.S_un_b.s_b3=0;
sock_addr.sin_addr.S_un.S_un_b.s_b4=1;
connect(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr)); // mi connetto all'indirizzo scelto
closesocket(sock); // chiudo la socket
WSACleanup(); //libero le risorse utilizzate dalla libreria Winsock
return 0;
}

il compilatore mi da i seguenti errori:

r
Esecuzione di g++.exe...
g++.exe "C:\Documents and Settings\user\Desktop\SenzaTitolo1.cpp" -o "C:\Documents and Settings\user\Desktop\SenzaTitolo1.exe" -I"C:\Dev-Cpp\include\c++" -I"C:\Dev-Cpp\include\c++\mingw32" -I"C:\Dev-Cpp\include\c++\backward" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"
C:\DOCUME~1\user\IMPOST~1\Temp/cc4acaaa.o(.text+0x48):SenzaTitolo1.cpp: undefined reference to `WSAStartup@8'
C:\DOCUME~1\user\IMPOST~1\Temp/cc4acaaa.o(.text+0x59):SenzaTitolo1.cpp: undefined reference to `socket@12'
C:\DOCUME~1\user\IMPOST~1\Temp/cc4acaaa.o(.text+0x6f):SenzaTitolo1.cpp: undefined reference to `htons@4'
C:\DOCUME~1\user\IMPOST~1\Temp/cc4acaaa.o(.text+0x97):SenzaTitolo1.cpp: undefined reference to `connect@12'
C:\DOCUME~1\user\IMPOST~1\Temp/cc4acaaa.o(.text+0xa5):SenzaTitolo1.cpp: undefined reference to `closesocket@4'
C:\DOCUME~1\user\IMPOST~1\Temp/cc4acaaa.o(.text+0xad):SenzaTitolo1.cpp: undefined reference to `WSACleanup@0'

Esecuzione terminata

MItaly
21-12-2008, 16:51
Devi dire al linker di collegare ai tuoi file oggetto anche Ws2.lib (o Ws2.a).

oregon
21-12-2008, 16:54
La libreria da indicare al linker e' la libws2_32.a

killerbomb
21-12-2008, 16:56
Originariamente inviato da MItaly
Devi dire al linker di collegare ai tuoi file oggetto anche Ws2.lib (o Ws2.a).
cioè cosa devo aggiungere o modificare nel codice?
p.s
non sono molto esperto

oregon
21-12-2008, 17:08
Originariamente inviato da killerbomb
cioè cosa devo aggiungere o modificare nel codice?
p.s
non sono molto esperto

Nel codice non devi modificare nulla ...

Se utilizzi DevCpp (come si nota) devi aprire le Opzioni del Progetto, andare sulle opzioni del Linker ed aggiungere la libreria che ti ho indicato

libws2_32.a

che sta nella cartella lib

XWolverineX
21-12-2008, 18:40
oppure un buon pragma comment

oregon
21-12-2008, 19:01
Originariamente inviato da XWolverineX
oppure un buon pragma comment

Sicuro che funzioni con il compilatore in questione?

XWolverineX
21-12-2008, 19:58
ya

oregon
21-12-2008, 23:10
Originariamente inviato da XWolverineX
ya

Con la versione

devcpp 4.9.9.2

e

gcc 3.4.2 (mingw special)

si ha un errore ... quale versione usi?

Loading