• Domingo 28 de Abril de 2024, 08:00

Autor Tema:  Re: sockets  (Leído 5821 veces)

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« en: Martes 22 de Abril de 2003, 21:30 »
0
que necesito para comenzar a crear sockets en C (Servido y Cliente)

Saludos

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #1 en: Miércoles 23 de Abril de 2003, 00:36 »
0
debes definir si es para linux o para windows


serciorate de que tengas un API de sockets, para windows  winsock, para linux libsocket

hay varios tipos, orientados a conexion y no orientados a conexion, es mas facil los no orientados pero es más competo los orientados.

suerte, si tienes inquietudes me dices.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #2 en: Miércoles 23 de Abril de 2003, 19:00 »
0
Quiero crear un socket sobre unix (servidor) y  otro sobre Linux (cliente), este cliente quiero que se una script para una pagina web.

Gracias

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #3 en: Miércoles 23 de Abril de 2003, 19:16 »
0
utiliza libsocket independiente si es para linux o para UNix porque finalmente es lo mismo.

Indaga..hay bastante info an internet, en el momento no tengo aca mis programas de sockets pero los podre conseguir para mas tarde o para mañana y una vez los tenga te podre colocar unos ejemplos...

estudia la teoria, es importante para que estudies bien tu programa...
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #4 en: Miércoles 23 de Abril de 2003, 21:23 »
0
gracias, estudiare la teoria que de hecho ya la estoy viendo. Cuando tengas tus ejemplos me avisas y otra vez vale

Saludos

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #5 en: Miércoles 23 de Abril de 2003, 23:34 »
0
conexion:
mini ftp simulado copia y trae archivos al 1 servidor, sservidor soporta multiples conexiones.

no conexion:
envia un mensaje al servidor y este le devuelve el mensaje al revez
1 servidor soporta multiple conexiones

ojo si trabajas versiones de UNIx ya que en algunos casos se genera basura enm las cadenas, para lo cual deberas implementar un rutina que te las inicialice con NULLs.

Si tienes dudas me preguntas aqui en el foro.

nota: el codigo es una modificacion de uno que hice en u taller de practica, asi que no es 100% codigo mio, puesto que los mios los tengo en casa.

chau
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #6 en: Jueves 24 de Abril de 2003, 00:14 »
0
Los voy a estudiar y probar, lo que me va a demorar un resto y luego te cuento.

Gracias juanK

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #7 en: Lunes 5 de Mayo de 2003, 17:46 »
0
Hola JuanK, al compilar me arooja el siguiente mensaje:

$ cc cliente.c
Undefined                       first referenced
 symbol                             in file
recv                                cliente.o
socket                              cliente.o
send                                cliente.o
connect                             cliente.o
gethostbyname                       cliente.o
UX:ld: ERROR: a.out: fatal error: Symbol referencing errors. No output written t
Fatal error in /usr/bin/ld
Exit status 01


No se si es porque falta alguna libreria o que, si sabes algo avisane

gracias

Saludos

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #8 en: Lunes 5 de Mayo de 2003, 17:56 »
0
debes hacerlo asi, porque debes linkar la libreria de sockets

$ gcc cliente.c -lsocket

chau... me cuentas

Juank
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #9 en: Lunes 5 de Mayo de 2003, 18:12 »
0
de esa forma me arroja los siguiente:

gcc cliente.c -lsocket
Undefined                       first referenced
 symbol                             in file
__nsl_getprotoent                   /usr/sde/default/usr/lib/libsocket.so
h_errno                             /usr/sde/default/usr/lib/libsocket.so
__nsl_getprotobynumber              /usr/sde/default/usr/lib/libsocket.so
_gethostbyname                      /usr/sde/default/usr/lib/libsocket.so
__nsl_setsockopt                    /usr/sde/default/usr/lib/libsocket.so
__nsl_accept                        /usr/sde/default/usr/lib/libsocket.so
__nsl_getprotobyname                /usr/sde/default/usr/lib/libsocket.so
gethostbyname                       /var/tmp/cca002Ct1.o
__nsl_endprotoent                   /usr/sde/default/usr/lib/libsocket.so
__nsl_recvmsg                       /usr/sde/default/usr/lib/libsocket.so
__nsl_listen                        /usr/sde/default/usr/lib/libsocket.so
__nsl_inet_addr                     /usr/sde/default/usr/lib/libsocket.so
_gethostname                        /usr/sde/default/usr/lib/libsocket.so
_inet_ntoa                          /usr/sde/default/usr/lib/libsocket.so
__nsl_recv                          /usr/sde/default/usr/lib/libsocket.so
__nsl_setprotoent                   /usr/sde/default/usr/lib/libsocket.so
UX:ld: ERROR: a.out: fatal error: Symbol referencing errors. No output written t

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #10 en: Lunes 5 de Mayo de 2003, 18:30 »
0
debes de bajar la libreria de sockets porque  no la tienes instalada o bien esta dañada.

bajala de este link :

http://www.phekda.freeserve.co.uk/richd ... sck_dl.htm

la debes copiar en el directorio donde tengas tus librerias de linux, por lo general esto esta en usr/libs, si bajas la version comprimida , debes descomprimirla y copiar el archivo libsocket.a

Juank
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #11 en: Lunes 5 de Mayo de 2003, 18:48 »
0
JuanK estoy en compilando en unix y la versión de este es: DG/UX Release R4.20MU06 AViiON.

como puedo en contrarle esta libreria y como deberia buscarla.

Saludos

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #12 en: Lunes 5 de Mayo de 2003, 19:21 »
0
baja la libreria de internet
la debes copiar en
/usr/lib

el archivo se llama libsocket.a
lo mas probable es que no la tengas, o que tengas una version vieja, asi que no pierdes nada bajandola e instalandola..el problema es que la libreria del link es para el djgpp.. y no se hasta que punto sea compatible..pero recuerdo que la he instalado sobre linux redhat sin problemas...recuerda que en l pagina bajas la libreria en el archivo ls080.zip...debes descomprimirlo.



Juank
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #13 en: Martes 6 de Mayo de 2003, 16:18 »
0
Me sirve el libsocket.a de linux para la maquina Unix o tiene que ser una libreria para Unix.

Saludos

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #14 en: Martes 6 de Mayo de 2003, 16:24 »
0
Tecnicamente no importa, pero suelen haber exepciones, por ejemplo en el linux caldera, he oido que te toca vajr un parche para que funcione, pero de resto nio he escuchado ese tipo de problemas, en caso de que no fuese compatible, no importa porque sino la tienes, pues solo la borras o la dejas ahi mientras consigues una compatible, o un parche.

Pruebalo, que lo mas probable es que si te funcione..

Chau
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #15 en: Martes 6 de Mayo de 2003, 16:51 »
0
UX:ld: ERROR: a.out: fatal error: Symbol referencing errors. No output written t
Fatal error in /usr/bin/ld

juanK estaba pensando en este error y no será porque no puedo guardar en el.
Que sabes tu del archivo ld? que hace?
Si sabes avisame.

Gracias

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #16 en: Martes 6 de Mayo de 2003, 17:06 »
0
UX:LD.. es un error de linkeo con la libreria,
ld es el ejecutable que se encarga de linkar laslibrerias a tus programas cuenado compilas los mismos.
El error:
Symbol referencing errors
Fatal error in /usr/bin/ld

el error lo reporta el archivo ld al tratar de linkar con una libreria que le especificaste, no ha encontrado los simbolos a los que se hace referencia, lo que sucede esque las funciones al serc compiladas generan simbolos en lenguaje de maquina que indican donde se encuentra la funcion, segun la norma ANSI estos simbolos deben ser nombrados por el nombre de la funciones antecedido de el caracter '_' por eso cuando compilas un rpograma y te dice que no encuentra el simbolo _mifuncion, se refiere a que utilizas la funcion mifuncion pero que no la encontro.

En fin en resumidas cuentas, te esta reportando que no encuentra algunas funciones a las que se hace referencia, si estas usando lo de los sockets entonces es que o no tienes la libreria, o bien esta dañada.

Me cuentas,

Juank
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #17 en: Martes 6 de Mayo de 2003, 18:54 »
0
En este sistema nunca se habian utilizados las librerias de socket, por eso descarto que esten dañadas, pero si  puede que sean antiguas.
concluyendo y corrigeme si estoy equivocado, debo bajar la libreria libsocket y reemplazar la anterior.
ah¡ tu explicación me dejo bastante claro.
Puedo bajar la libreias del link que me diste?

Muchas gracias

saludos

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #18 en: Martes 6 de Mayo de 2003, 19:06 »
0
baja las librerias.. lo de viejas no cre , salvo que tu unix sea de hace mas de 20 años.. el problema es de version o que simplemente no tiene la libreria.

chau
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #19 en: Martes 6 de Mayo de 2003, 21:15 »
0
Mira libsocket se ecuentra en /usr/lib junto con estos otros:

libsocket.a
libsocket.so
libsocket.so.1
libsocket_b8.a
libsocket_b8.so

como podría saber si libsocket.a es correcto, ya que al editarlo arroja una serie de caracteres ilegibles.

Saludos

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #20 en: Martes 6 de Mayo de 2003, 21:19 »
0
no lo se, lo que sucede es que esa libsocket.a , esta compilada por eso no puedes ver su conteniodo, hay comendo que permiten ver los simbolos que poseen, pero para mi es mucho mejor copiar una nueva que ponerme a revisar ... no crees?.. copiala y listo, de internet bajas un zip, lo descomprimes y buscas el libsocket.a, luego guarda el que tienes en tu pc, en una carpte diferente y  reemplazalo por el nuevo.


juank
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #21 en: Miércoles 7 de Mayo de 2003, 16:11 »
0
al compilar de esta forma :gcc cliente.c -lsocket, me arrojaba este tipo de error:

__nsl_getprotoent /usr/sde/default/usr/lib/libsocket.so
h_errno /usr/sde/default/usr/lib/libsocket.so
__nsl_getprotobynumber /usr/sde/default/usr/lib/libsocket.so

Mi pregunta es  que pasa con la libreria libsocket.so, puede ser que esta falte, o las dos?

Saludos

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #22 en: Miércoles 7 de Mayo de 2003, 16:33 »
0
puede ser que tambien este dañada... lo que pasa es la la libsocket so es la misma libsocket.a pero esta es para linkear dinamicamente, en cambio la .a, linkea estaticamente... esta muy raro, pero ya que copiaste la .a.. copia tambien la .so
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

reckba2

  • Miembro activo
  • **
  • Mensajes: 43
    • Ver Perfil
Re: sockets
« Respuesta #23 en: Miércoles 7 de Mayo de 2003, 18:52 »
0
El comando bcopy copia los bytes de una area a otra, pero la verdad que no entiendo lo que hace

hp = gethostbyname(argv[1])

bcopy((char *)hp->h_addr, (char *)&cliente.sin_addr, hp->h_length)

y argv[1] es el nombre del host

Si me puedes ayudar con este de lo agradeceria.

Saludo

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: sockets
« Respuesta #24 en: Miércoles 7 de Mayo de 2003, 19:19 »
0
Esta funcion recibe un apuntador a una region de memoria y copia asigna una cantidad determianada de bits a otra area de memoria  por medio de otro apuntador.

Lo del (char*) creo que sobraria generalmente, pero en la U se implemento asi , probablemente por compatibilidad con la version(vieja) del compilador.

con gethostbyname , obtenemos todos los datos de conexion con el host, a travez del nombre, es decir le pasamos el nombre y el nos llena campos como la ip, seguramente que el numero de socket remoto etc., y lo que hacemos con

bcopy((char *)hp->h_addr, (char *)&cliente.sin_addr, hp->h_length)

es copiar el contenido de un apuntador en otro..OJO que no es lo mismo a copiar la direccion de memoria de un a puntador a otro.
Si te fijas lo que copiamos es unicamente el area de datos correspondiente a la direccion del sock, y esto es para que en el socket del cliente se conozca la direccion del host.

Creo que este programa estaba algo complicado para comenzar, pero la cerdad no tenia tiempo para hacer uno bien sencillo, te pido disculpas por eso, solo espero no estar te poniendo en muchos problemas...

Juank
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io