Programación General > C/C++

 Problema con sockets

(1/1)

System@32:
Hola!

He empezado a jugar con los sockets (cliente/servidor). No parece tan complicado xD. El cliente envía una cadena de texto y el servidor la tiene que recoger y mostrar por la pantalla. El problema es que el servidor nunca recoge el texto. No se si es problema del código o que. Desactive firewall, antivirus, etc.

Server

--- Código: C++ ---#include <iostream>#include <WinSock2.h>#include <ws2tcpip.h>#include <iphlpapi.h>#include <conio.h> #pragma comment(lib, "Ws2_32.lib") void main( int argc, char *argv[] ){    WSAData wsaData;    SOCKET mSocket, acceptSocket;    struct sockaddr_in service, remote;     char sendbuf[1024] = "Hello! I'm server, sending some test data...";    char recvbuf[1024] = "";     int bytesSent = SOCKET_ERROR;    int bytesRecv = SOCKET_ERROR;     char exit = '';     if( WSAStartup(MAKEWORD(2,2), &wsaData) != 0 )    {        std::cout << "WSAStartup failed!" << std::endl;        getch(); return;    }     if( (mSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET )    {        std::cout << "Error at socket(): " << WSAGetLastError() << std::endl;        WSACleanup; getch(); return;    }     service.sin_family = AF_INET;    service.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");    service.sin_port = htons( 55555 );     if( (bind(mSocket, (SOCKADDR*) &service, sizeof(service))) == SOCKET_ERROR )    {        std::cout << "Error at bind(): " << WSAGetLastError() << std::endl;        closesocket( mSocket ); WSACleanup; getch(); return;    }     if( listen(mSocket, 1) == SOCKET_ERROR )    {        std::cout << "Error at listen(): " << WSAGetLastError() << std::endl;        closesocket( mSocket ); WSACleanup; getch(); return;    }     std::cout << "****************************************" << std::endl;    std::cout << "* Server is ready. Waiting for client! *" << std::endl;    std::cout << "****************************************" << std::endl << std::endl;     acceptSocket = SOCKET_ERROR;    while( acceptSocket == SOCKET_ERROR )    {        acceptSocket = accept( mSocket, NULL, NULL );    }    mSocket = acceptSocket;     bytesRecv = recv( mSocket, recvbuf, strlen(recvbuf), 0 );    if( bytesRecv == SOCKET_ERROR )    {        std::cout << "Error at recv(): " << WSAGetLastError() << std::endl;        closesocket( mSocket ); WSACleanup; getch(); return;    }     printf( "Bytes received: %dn", bytesRecv );    printf( "Client: %sn", recvbuf );    system( "pause" );     closesocket( mSocket );    WSACleanup;} 
Cliente

--- Código: C++ ---#include <iostream>#include <WinSock2.h>#include <ws2tcpip.h>#include <iphlpapi.h>#include <conio.h> #pragma comment(lib, "Ws2_32.lib") void main( int argc, char *argv[] ){    WSAData wsaData;    SOCKET mSocket, acceptSocket;    sockaddr_in service;     char sendbuf[1024] = "Hello! I'm client, sending some test data...";    char recvbuf[1024] = "";     int bytesSent = SOCKET_ERROR;    int bytesRecv = SOCKET_ERROR;     if( WSAStartup(MAKEWORD(2,2), &wsaData) != 0 )    {        std::cout << "WSAStartup failed!" << std::endl;        getch(); return;    }     if( (mSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET )    {        std::cout << "Error at socket(): " << WSAGetLastError() << std::endl;        WSACleanup; getch(); return;    }     service.sin_family = AF_INET;    service.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");    service.sin_port   = htons( 55555 );     if( (connect(mSocket, (SOCKADDR*) &service, sizeof(service))) == SOCKET_ERROR )    {        std::cout << "Error at connect(): " << WSAGetLastError() << std::endl;        closesocket( mSocket ); WSACleanup; getch(); return;    }     bytesSent = send( mSocket, sendbuf, strlen(sendbuf), 0 );    if( bytesSent == SOCKET_ERROR )    {        std::cout << "Error at send(): " << WSAGetLastError() << std::endl;        closesocket( mSocket ); WSACleanup; getch(); return;    }        printf( "Bytes sent: %dn", bytesSent );    system( "pause" );     closesocket( mSocket );    WSACleanup;} 

Epa:
Buenas


--- Citar ---char recvbuf[1024] = "";

--- Fin de la cita ---


--- Citar ---bytesRecv = recv( mSocket, recvbuf, strlen(recvbuf), 0 );

--- Fin de la cita ---

strlen(recvbuf) devuelve 0, por lo que estarias haciendo:

bytesRecv = recv( mSocket, recvbuf, 0, 0 );

Si le decis que el tamaño del buffer es 0 no va a guardar nada.


Saludos

m0skit0:
sizeof no strlen

System@32:
Hostia! Si que no me di cuenta de eso! Gracias.

Navegación

[0] Índice de Mensajes

Ir a la versión completa