Ponowne połączenie z serwerem TCP/IP

0

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;
}
0

Zaryzykowałbym stwierdzenie, że nie możesz się połączyć, ponieważ pierwsze połączenie jest nadal otwarte i działające -- nigdzie go nie zamykasz...

0

Masz ciągle otwarte połączenie do serwera. Wołaj closesocket. Przypuszczam, że zadziałało by także reużycie adresu ale lepiej nie idź ta drogą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1