Witam.
Uczę się programowania sieciowego. Napisałem prostego klienta (serwer jeszcze nie powstał). Mam problem bo nie mogę tego skompilować. Jeśli ktoś mógłby mi podpowiedzieć gdzie jest błąd to będę bardzo wdzięczny.
#include <winsock2.h>
#include <stdio.h>
#include <string.h>
#define PROTOPORT 5193 //domyslny numer portu
extern int errno;
char localhost[] = "localhost";
int main(int argc, char **argv)
{
struct hostent *ptrh; //tabela maszyn
struct protoent *ptrp; //tabel protokolow
struct sockaddr_in sad; //adres serwera
int sd; //destryktor gniazda
int port; //numer portu
char *host; //nazwa maszyny
int n; //liczba odebraych znakw
char buf[1000]; //bufor danych
#ifdef WIN32
WSADATA wsaData;
WSASStartup(0x0101, &wsaData);
#endif
memset((char*)&sad, 0, sizeof(sad)); //zerowanie stuuktury sad
sad.sin_family = AF_INET; //ustawianie rodziny
//sprawdanie czy podano port
if (argc > 2)
{
port = atoi(argv[2]);
}
else
{
port = PROTOPORT;
}
if (argc > 0)
{
sad.sin_port = htons((u_short)port);
}
else
{
fprintf(stderr, "błędny numer portu %s\n", argv[2]);
exit(1);
}
//sprawdzanie czy podano nazwe maszyny
if (argc > 1)
{
host = argv[1];
}
else
{
host = localhost;
}
//tlumaczenie nazwy maszyny na IP
ptrh = gethostbyname(host);
if (((char *)ptrh) == NULL)
{
fprintf(stderr, "bledna nazwa maszyny: %s\n", host);
exit(1);
}
memcopy(&sad.sin_addr, ptrh->h_addr, ptrh->h_length);
//zmien nazwe protokolu na numer
if ( ((int)(ptrp = getprotobyname("tcp"))) ==0)
{
fprintf(stderr, "nie moge zmienic tcp na numer");
exit(1);
}
// stworz gniazdo
sd = socket(PF_INET, SOCK_STREAM, ptrp->p_proto);
if (sd < 0)
{
fpdintf(stderr, " nie moge zrobic gniazda");
exit(1);
}
//polacz gniazdo z serewerem
if (connect(sd, (struct sockaddr *)&sad, sizeof(sad)) < 0)
{
fprintf(stderr, "nie wywolano connect");
exit(1);
}
//czytaj dane z gniazda i wypisuj na ekran
n = recv(sd, buf, sizeof(buf), 0);
while (n > 0)
{
write(1, buf, n);
n = recv(sd, buf, sizeof(buf), 0);
//zamknij gniazdo
closesocket(sd);
system("pause");
return 0;
}