Viernes 15 de Noviembre de 2024, 07:05
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problema con sockets
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Problema con sockets (Leído 1533 veces)
System@32
Nuevo Miembro
Mensajes: 23
Problema con sockets
«
en:
Miércoles 12 de Enero de 2011, 18:11 »
0
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
;
}
Tweet
Epa
Miembro MUY activo
Mensajes: 242
Nacionalidad:
Re: Problema con sockets
«
Respuesta #1 en:
Miércoles 12 de Enero de 2011, 19:08 »
0
Buenas
Citar
char recvbuf[1024] = "";
Citar
bytesRecv = recv( mSocket, recvbuf, strlen(recvbuf), 0 );
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
The sweet smell of a great sorrow lies over the land.
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Problema con sockets
«
Respuesta #2 en:
Miércoles 12 de Enero de 2011, 19:19 »
0
sizeof no strlen
Fr33k K0mpu73r
System@32
Nuevo Miembro
Mensajes: 23
Re: Problema con sockets
«
Respuesta #3 en:
Jueves 13 de Enero de 2011, 07:44 »
0
Hostia! Si que no me di cuenta de eso! Gracias.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problema con sockets