Jueves 14 de Noviembre de 2024, 04:11
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 SOCKET/LINUX
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Problema con SOCKET/LINUX (Leído 1854 veces)
fachamix
Miembro MUY activo
Mensajes: 173
Nacionalidad:
Problema con SOCKET/LINUX
«
en:
Sábado 7 de Enero de 2012, 04:12 »
0
Tengo el siguiente codigo, un simple servidor usando sockets sobre linux.
al momento de hacer el "write" se termina la conexion ... y me canse de revisar el codigo. Me duele la cabeza.
aqui el bendito codigo.
Código: C
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int
main
(
)
{
printf
(
"Iniciando servidor ...
\n
\r
"
)
;
int
server_sockfd
,
client_sockfd
;
struct
sockaddr_in server_dir
,
client_dir
;
int
server_len
,
client_len
;
char
buffer
[
1024
]
;
server_sockfd
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
)
;
server_dir.
sin_family
=
AF_INET
;
server_dir.
sin_addr
.
s_addr
=
inet_addr
(
"10.0.0.4"
)
;
server_dir.
sin_port
=
htons
(
9981
)
;
server_len
=
sizeof
(
server_dir
)
;
bind
(
server_sockfd
,
(
struct
sockaddr
*
)
(
&
server_dir
)
,
server_len
)
;
listen
(
server_sockfd
,
5
)
;
while
(
1
)
{
printf
(
"Esperando clientes ...
\n
\r
"
)
;
client_len
=
sizeof
(
client_dir
)
;
client_sockfd
=
accept
(
server_sockfd
,
(
struct
sockaddr
*
)
&
client_dir
,
(
socklen_t
*
)
&
client_len
)
;
if
(
client_sockfd
==
-
1
)
{
perror
(
"DEBUG"
)
;
exit
(
EXIT_FAILURE
)
;
}
printf
(
"Cliente conectado, esperando datos ...
\n
\r
"
)
;
while
(
1
)
{
memset
(
buffer
,
'
\0
'
,
sizeof
(
buffer
)
)
;
int
temp
=
read
(
client_sockfd
,
buffer
,
sizeof
(
buffer
)
)
;
buffer
[
strlen
(
buffer
)
-
2
]
=
'
\0
'
;
printf
(
"Leidos %d
\n
\r
"
,
temp
)
;
printf
(
"Datos recibidos [%s]
\n
\r
"
,
buffer
)
;
if
(
strcmp
(
buffer
,
"quit"
)
==
0
)
{
break
;
}
printf
(
"Enviando respuesta de ECHO
\n
\r
"
)
;
//ESTO SI SE EJECUTA
strcpy
(
buffer
,
"DATOS-RECIBIDOS"
)
;
//ESTO TAMBIEN
write
(
server_sockfd
,
buffer
,
sizeof
(
buffer
)
)
;
//CREO QUE AQUI ESTA EL ERROR,
//HACE QUE SE TERMINE EL PROGRAMA ABRUPTAMENTE
}
close
(
client_sockfd
)
;
printf
(
"Fin de conexion.
\n
\r
"
)
;
}
close
(
server_sockfd
)
;
exit
(
EXIT_SUCCESS
)
;
}
para probar este codigo , ejecuto este servidor, y para el cliente uso TELNET apuntando a la IP.
Logro conectarme y mandar un paquete, pero automaticamente el programa termina abruptamente.
gracias por su ayuda.
Tweet
La muerte vive celosa, de mi amada flor la vida. Dicen que me anda buscando, ojala si un dia me pilla. Me alle MACHAO Y CANTANDO PA QUE SE MUERA DE ENVIDIA
fachamix
Miembro MUY activo
Mensajes: 173
Nacionalidad:
Re:Problema con SOCKET/LINUX
«
Respuesta #1 en:
Sábado 7 de Enero de 2012, 13:27 »
0
old: write(server_sockfd,buffer,sizeof(buffer));
new: write(client_sockfd,buffer,strlen(buffer));
SOLVED!
La muerte vive celosa, de mi amada flor la vida. Dicen que me anda buscando, ojala si un dia me pilla. Me alle MACHAO Y CANTANDO PA QUE SE MUERA DE ENVIDIA
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problema con SOCKET/LINUX