Article View: es.comp.lenguajes.java
Article #134Servidor en Java y cliente en C
From: Abel Martinez
Date: Wed, 25 Nov 1998 00:00
Date: Wed, 25 Nov 1998 00:00
129 lines
4070 bytes
4070 bytes
Hola a todos!
Os envio este mensaje para pedir vuestra opinin�n sobre una peque�a
aplicaci�n que estoy programando. Dicha apliaci�n consiste en un
servidor desarrollado en Java y un cliente programado en C.
El servidor en Java abre un socket y escribe un string a todos los
clientes que se le conectan. Ahora bien, he probado de hacer esto y la
verdad es que no funciona. El resultado que obtengo es que mi cliente en
C se conecta correctamente, pero no parece entender los caracteres que
el servidor le envia. De hecho se queda permanentemente en el bucle de
lectura del string ya que no parece leer nunca el fin de la conexi�n por
parte del servidor.
He considerado que en Java los caracteres ocupan 16 bits y por lo
tanto empleo el tipo unsigned short int que en la maquina que trabajo
tiene como rango de valores posibles de 0 a 65536.
Os agradeceria que me dierias vuestra opinion o que me comentaseis
los problemas con los que os habeis encontrado si habeis trabajado en un
escenario similar.
A continuaci�n se encuentran los ficheros de codigo empleados por si
veis algun gazapo:
------------
Servidor en Java
------------
import java.awt.*;
import java.net.*;
import java.io.*;
class minimoServidor {
public static void main( String args[] ) {
ServerSocket s = (ServerSocket)null;
Socket s1;
String sendString = "Tutorial de Java!";
int longCad;
OutputStream s1out;
// Establece el servidor en el socket 4321 (espera 300 segundos)
try {
s = new ServerSocket( 4321,300 );
} catch( IOException e ) {
System.out.println( e );
}
// Ejecuta un bucle infinito de listen/accept
while( true ) {
try {
// Espera para aceptar una conexi�n
s1 = s.accept();
// Obtiene un controlador de fichero de salida asociado
// con el socket
s1out = s1.getOutputStream();
System.out.println("Se ha conectado un cliente");
// Enviamos nuestro texto
longCad = sendString.length();
for( int i=0; i < longCad; i++ )
s1out.write( (char)sendString.charAt( i ) );
// Cierra la conexi�n, pero no el socket del servidor
s1.close();
System.out.println("Ya he acabado con el cliente");
} catch( IOException e ) {
System.out.println( e );
}
}
}
}
---------
Cliente en C
---------
#include <stdio.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
struct hostent *hostinfo;
struct sockaddr_in sockcli;
char hostname[40], buff[80];
int sd, e;
unsigned short int c;
gethostname(hostname,40);
hostinfo = gethostbyname(hostname);
sd= socket( AF_INET,SOCK_STREAM,0);
if (sd < 0) {
printf("Error: opening socket\n");
exit(-1);
}
bzero(&sockcli,sizeof(sockcli));
sockcli.sin_family=AF_INET;
sockcli.sin_port=htons(4321);
sockcli.sin_addr.s_addr=inet_addr("147.83.63.156");
memset(sockcli.sin_zero,0,8);
e=connect(sd, (struct sockaddr *) &sockcli,sizeof(struct
sockaddr_in));
if (e <0 ) {
printf("Error: connect\n");
exit(-1);
}
while (c=read(sd,&c,sizeof(c))!=-1) {
printf("%d",c);
}
close(sd);
exit(0);
}
Gracias por vuestra atenci�n.
Saludos.
Abel.
Technical Details
Message-ID:
<365C2B39.B92A9016@tsc.upc.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: f53ec,7d0de3867516d679,start X-Google-Attributes: gidf53ec,public X-Google-Thread: 10f58f,7d0de3867516d679,start X-Google-Attributes: gid10f58f,public X-Google-Thread: 1116f3,7d0de3867516d679,start X-Google-Attributes: gid1116f3,public From: Abel Martinez <abel@tsc.upc.es> Subject: Servidor en Java y cliente en C Date: 1998/11/25 Message-ID: <365C2B39.B92A9016@tsc.upc.es> X-Deja-AN: 415566655 Content-Transfer-Encoding: 8bit Organization: Universitat Politecnica de Catalunya Content-Type: text/plain; charset=iso-8859-1 Mime-Version: 1.0 Newsgroups: es.comp.lenguajes.java,es.comp.lenguajes.c,es.comp.lenguajes.c++