Witam,
Jestem świeży w pisaniu aplikacji sieciowych. Mam do napisania aplikację kliencką która będzie pobierała dane z serwera w formie XML, ale już na samym początku utknąłem. W ramach treningu napisałem sobie taki bardzo prymitywny program na podstawie jakiegoś tutoriala:
/*test1.c*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define MSG_LEN 512
int main(void) {
printf ("TEST0!");
int s, result;
struct sockaddr_in taddr;
char msg [MSG_LEN];
/*tworzymy gniazdko*/
s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (s < 0) {
perror("socket");
return 1;
}
/*zerujemy strukture adresowa*/
memset(&taddr, 0, sizeof(struct sockaddr));
/*wypelniamy strukture adresem docelowym*/
taddr.sin_family = AF_INET;
taddr.sin_port = htons(80XX);//tu podaję port
taddr.sin_addr.s_addr = inet_addr("xxx.xxx.xxx.xxx");//tu podaję ip serwera
printf ("TEST1!");
/*laczymy sie z serwerem*/
result = connect(s, (struct sockaddr*)&taddr, sizeof(struct sockaddr));
if (result < 0) {
close(s);
perror("connect");
return 1;
}
/*w tym miejscu mozemy juz zaczac wymieniac dane z komputerem*/
memset (msg, 0, MSG_LEN);
result=send(s, "Tekst do wysłania", 25, 0);
if (result < 0)
{
close(s);
printf("Bug przy wysyłaniu!");
return 1;
}
printf("Poszlo!");
result=recv (s, msg, MSG_LEN, 0);
if (result < 0)
{
close(s);
printf("Bug przy odbiorze!");
return 1;
}
printf ("Liczba odczytanych bajtow: %d", result);
/*zamykamy gniazdko*/
close(s);
return 0;
}
W momencie, gdy do kodu fragment z recv () program w ogóle nie działa - po odpaleniu jakby się zawiesza. Nawet nie wyświetlają się te teksty "TEST". Gdy nie ma tego fragmentu, to wygląda, że łączy się i wysyła prawidłowo. O co chodzi? Bardzo proszę o pomoc.