Mam do napisania program, w którym klient łączy się z serwerem. Następnie wysyła dane do serwera. Potem serwer wysyła swoja odpowiedź a na koniec rozłączą się z klientem. Tak wygląda pojedyncza iteracja. Po rozłączeniu klient powinien próbować ponownie połączyć się z serwerem, aż będzie to możliwe i wykonać kolejną wymianę danych itd. Realizuję to w pętli while. Niestety potrafię połączyć się z serwerem jednorazowo.
Poniżej załączam ważniejsze części kodu programu:
#include "client.h"
#include "util.h"
#include <stdio.h>
#include <iostream>
#include <stdio.h>
#include <winsock.h>
#include "winsockinit.h"
#include "client.h"
#pragma comment(lib,"ws2_32.lib") //Winsock Library
int client_main(WSADATA *wsa){
SOCKET s;
struct sockaddr_in server;
char * message , server_reply[4000];
int recv_size;
printf("Initialised.\n");
//Create a socket
if((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
printf("Could not create socket : %d", WSAGetLastError());
}
printf("Socket created.\n");
server.sin_addr.s_addr = inet_addr("192.168.1.136");
server.sin_family = AF_INET;
server.sin_port = htons(1234);
while(1)
{
//Connect to remote server
while(connect(s, (struct sockaddr *)&server, sizeof(server)) < 0)
{
printf("Nieudana proba\n");
printf("connect error: %d", WSAGetLastError());
}
//puts("Connected");
//Send some data
char *cstr = new char[xml.length() + 1];
strcpy(cstr, xml.c_str());
message = cstr;
std::cout << "Wyslano: " << message << std::endl;
/* message = "Jestem plusem eeeeem\n"; */
if( send(s , message , strlen(message) , 0) < 0)
{
puts("Send failed");
return 1;
}
puts("Data Send\n");
if((recv_size = recv(s , server_reply , 4000 , 0)) == SOCKET_ERROR)
{
puts("recv failed");
}
puts("Reply received\n");
}
return 0;
}