[C++]WInSock Warning signed ...

0

Witam mam taki problem wyskakuje mi taki warning . I nie mam pojecia dlaczego

warning: comparison between signed and unsigned integer expressions

Błąd występuje w pętli while według kompilatora

void ServerSocket::Listen()
{
    //cout<<"LISTEN FOR CLIENT..."<<endl;

    if ( listen ( mySocket, 1 ) == SOCKET_ERROR )
    {
        cerr<<"ServerSocket: Error listening on socket\n";
        system("pause");
        WSACleanup();
        exit(15);
    }

    //cout<<"ACCEPT CONNECTION..."<<endl;

    acceptSocket = accept( myBackup, NULL, NULL );
    while ( acceptSocket == SOCKET_ERROR )
    {
        acceptSocket = accept( myBackup, NULL, NULL );
    }
    mySocket = acceptSocket;
} 
0

Pewnie acceptSocket masz typu unsigned ., wiec nie dziwne, ze sie czepia... Nie rzutujesz jawnie, wiec zwraca Ci po prostu uwage, ze takie porownanie moze prowadzic do blednych wynikow pracy kodu. Typ signed jak zapewne wiesz przyjmuje wartosci -0+, a unsigned tylko wartosci 0+ ;)

0

No właśnie wszystko jest int

0

Sprobuj moze z INVALID_SOCKET.

0

zmieniłem to wszędzie wyskoczyło gdzie jest INVALID_SOCKET ten Warning co podałem wyżej .

teraz to tak wygląda.

#include "win.h"
#include <string>
#include <iostream>

Socket::Socket()
{
    if( WSAStartup( MAKEWORD(2, 2), &wsaData ) != NO_ERROR )
    {
        cerr<<"Socket Initialization: Error with WSAStartup\n";
        system("pause");
        WSACleanup();
        exit(10);
    }

    //Create a socket
    mySocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );

    if ( mySocket == INVALID_SOCKET )
    {
        cerr<<"Socket Initialization: Error creating socket"<<endl;
        system("pause");
        WSACleanup();
        exit(11);
    }

    myBackup = mySocket;
}

Socket::~Socket()
{
    WSACleanup();
}

bool Socket::SendData( char *buffer )
{
    send( mySocket, buffer, strlen( buffer ), 0 );
    return true;
}

bool Socket::RecvData( char *buffer, int size )
{
    int i = recv( mySocket, buffer, size, 0 );
    buffer[i] = '\0';
    return true;
}

void Socket::CloseConnection()
{
    //cout<<"CLOSE CONNECTION"<<endl;
    closesocket( mySocket );
    mySocket = myBackup;
}

void Socket::GetAndSendMessage()
{
    char message[STRLEN];
    cin.ignore();//without this, it gets the return char from the last cin and ignores the following one!
    cout<<"Send > ";
    cin.get( message, STRLEN );
    SendData( message );
}

void ServerSocket::StartHosting( int port )
{
     Bind( port );
     Listen();
}

void ServerSocket::Listen()
{
    //cout<<"LISTEN FOR CLIENT..."<<endl;

    if ( listen ( mySocket, 1 ) == INVALID_SOCKET )
    {
        cerr<<"ServerSocket: Error listening on socket\n";
        system("pause");
        WSACleanup();
        exit(15);
    }

    //cout<<"ACCEPT CONNECTION..."<<endl;

    acceptSocket = accept( myBackup, NULL, NULL );
    while ( acceptSocket == INVALID_SOCKET )
    {
        acceptSocket = accept( myBackup, NULL, NULL );
    }
    mySocket = acceptSocket;
}

void ServerSocket::Bind( int port )
{
    myAddress.sin_family = AF_INET;
    myAddress.sin_addr.s_addr = inet_addr( "0.0.0.0" );
    myAddress.sin_port = htons( port );

    //cout<<"BIND TO PORT "<<port<<endl;

    if ( bind ( mySocket, (SOCKADDR*) &myAddress, sizeof( myAddress) ) == INVALID_SOCKET )
    {
        cerr<<"ServerSocket: Failed to connect\n";
        system("pause");
        WSACleanup();
        exit(14);
    }
}

void ClientSocket::ConnectToServer( const char *ipAddress, int port )
{
    myAddress.sin_family = AF_INET;
    myAddress.sin_addr.s_addr = inet_addr( ipAddress );
    myAddress.sin_port = htons( port );

    //cout<<"CONNECTED"<<endl;

    if ( connect( mySocket, (SOCKADDR*) &myAddress, sizeof( myAddress ) ) == INVALID_SOCKET )
    {
        cerr<<"ClientSocket: Failed to connect\n";
        system("pause");
        WSACleanup();
        exit(13);
    }
}

|In member function 'void ServerSocket::Listen()':|
warning: comparison between signed and unsigned integer expressions|
In member function 'void ServerSocket::Bind(int)':|
101|warning: comparison between signed and unsigned integer expressions|
In member function 'void ClientSocket::ConnectToServer(const char*, int)':|
warning: comparison between signed and unsigned integer expressions|
||=== Build finished: 0 errors, 3 warnings ===|
0

Mialem na mysli zmiane tylko przy accept, poniewaz ta funkcja nie zwraca SOCKET_ERROR.

0

Olej te warningi. Miałem to samo, projekt ma już kilka tysięcy linijek i jest wszystko w najlepszym porządku.

0

Chyba poszło ! Z invalid_socket :)

Blood piszesz aplikacje sieciowe i uzywasz WinSock ?

0

A mam pytanie jak w Code::Blocks robi się plik .exe

0

Blood piszesz aplikacje sieciowe i uzywasz WinSock ?

Nie zwykłem. Użyłem, bo musiałem.

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