Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinSock] Problem z połączeniem.

Ostatnio zmodyfikowano 2014-05-23 15:26
Autor Wiadomość
Burn1904
Temat założony przez niniejszego użytkownika
[WinSock] Problem z połączeniem.
» 2014-05-19 23:33:49
Witam!

Niedawno zacząłem bawić się z winsockiem. Mam jednak pewien problem, przez który nie mam pojęcia jak przebrnąć. Chodzi mianowicie o to, że gdy klient podłączy się do servera ( teoretycznie ), klient wyświetla informację iż się podłączył, ale server go cały czas nie widzi. Odblokowałem w ruterze port nr 8888, którego używam. Nie rozumiem tylko tego, że klient się ( teoretycznie ) podłącza do servera, a server nic. ( Czyli prawdopodobnie się niepodłącza ... Nie mam pojęcia o co chodzi... )

KOD SERVERA :
C/C++
#include <iostream>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <string>
#include <Ws2tcpip.h>

using namespace std;

int main( int argc, char * argv[] )
{
    WSADATA WsaDat;
   
    if( WSAStartup( MAKEWORD( 2, 2 ), & WsaDat ) == 0 )
    {
       
    }
    else
    {
        //  startup failed
       
        cout << "Error: Startup fail.";
    }
   
    sockaddr_in serverAddr;
   
    SOCKET serverSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    if( serverSocket == INVALID_SOCKET )
    {
        // error handling code
        cout << "Socket problem: INVALID_SOCKET \n";
    }
   
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons( 8888 );
    serverAddr.sin_addr.s_addr = INADDR_ANY;
   
    if( bind( serverSocket,( SOCKADDR * )( & serverAddr ), sizeof( serverAddr ) ) == SOCKET_ERROR )
    {
        cout << "Error: Problem with binding socket";
    }
   
    listen( serverSocket, 1 );
   
    SOCKET clientSocket;
    sockaddr_in clientAddr;
    int clientAddrLEN = sizeof( clientAddr );
   
    char mess[ 5 ];
   
    strcpy( mess, "MESSS" );
   
    for(;; )
    {
        clientSocket = accept( serverSocket,( sockaddr * ) & clientAddr, & clientAddrLEN );
        if( clientSocket != INVALID_SOCKET )
        {
            cout << "Klient polonczony ";
            for(;; )
            {
                send( clientSocket, mess, 5, 0 );
            }
        } else {
           
            cout << ".";
            Sleep( 100 );
           
        }
    }
   
   
    return 0;
}

KOD KLIENTA :
C/C++
#include <iostream>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <string>
#include <Ws2tcpip.h>

using namespace std;

int main()
{
    const int iReqWinsockVer = 2; // Minimum winsock version required
   
    WSADATA wsaData;
   
    if( WSAStartup( MAKEWORD( 2, 2 ), & wsaData ) == 0 )
    {
       
    }
    else
    {
        //  startup failed
    }
   
    SOCKET hSocket;
   
    hSocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    if( hSocket == INVALID_SOCKET )
    {
        cout << "ERROR";
    }
   
   
    sockaddr_in SockAddr;
    SockAddr.sin_port = htons( 8888 );
    SockAddr.sin_family = AF_INET;
    SockAddr.sin_addr.s_addr = inet_addr( "127.0.0.1" );
   
    struct hostent * host;
    host = gethostbyaddr(( const char * ) & SockAddr, sizeof( struct in_addr ), AF_INET );
   
    cout << "W8 to connect...";
    if( connect( hSocket,( sockaddr * )( & SockAddr ), sizeof( SockAddr ) ) == - 1 )
    {
        // error handling code
        cout << "ERROR";
    } else {
        cout << "polonczono";
    }
   
    while( true )
    {
       
       
       
    }
    return 0;
}
P-110441
pekfos
» 2014-05-20 07:53:45
C/C++
char mess[ 5 ];

strcpy( mess, "MESSS" );
Nie mieścisz się w tablicy.
P-110444
Burn1904
Temat założony przez niniejszego użytkownika
» 2014-05-23 08:32:20
Tylko problem tkwi w tym, że server w ogóle nie widzi klienta. Na końcu kodu servera znajduje się pętla odpowiedzialna za komunikat czy klient się podłączył, jeśli nie to co jakiś czas wyświetlane są kropki, i to się cały czas dzieje po skompilowaniu oraz uruchomieniu obu programów. Szukałem na różnych forach/stronach itp, ale cały czas nie mam pojęcia czemu server nie widzi klienta. Prawdopodobnie jest w tym kodzie zrobiony bardzo głupi błąd, który dla żółtodzioba jest trudny do odnalezienia.
P-110714
pekfos
» 2014-05-23 12:57:22
Poprawiłeś błąd z tablicą? listen() zwraca poprawne wartości?

a server nic.
co jakiś czas wyświetlane są kropki, i to się cały czas dzieje po skompilowaniu oraz uruchomieniu obu programów.
Wprowadzasz w błąd.
P-110728
Burn1904
Temat założony przez niniejszego użytkownika
» 2014-05-23 15:26:58
Chodziło mi o to, że gdy server pracuję to wyświetla co jakiś czas kropki, ale gdy się podłączy klient powinien wyświetlić komunikat. Podczas gdy server działa oraz włączam klienta, klient wyświetla komunikat iż się podłączył do servera, ale sever nie daje żadnego znaku że klient nawiązał połaczenie. listen() zwraca wartość 0.
P-110742
« 1 »
  Strona 1 z 1