Viernes 03 de julio de 2009 a las 22:05
Mira tengo que atravez de este codigo enviar un archivo de texto (.txt) este codigo es para cualquier distribucion de linux yo lo hice en ubuntu con el Geany
y lo bueno es que ya conecta pero no sé como hacer que al momento de concetarse envie un archivo de texto :(
te pondré el codigo a ver si me puedes ayudar
Son 4 archivos para completar el socket original .. los codigos los pondré en orden de archivo
El primer codigo : Cliente
#include \\\\\\\"./data.h\\\\\\\"
#include <stdio.h>
extern socket_cliente();
main()
{
int conexion;
struct PDU peticion, respuesta;
printf(\\\\\\\"CLI:INICIO de cliente\\\\\\\");
conexion=socket_cliente(\\\\\\\"127.0.0.1\\\\\\\",5555);
strcpy(peticion.mensaje,\\\\\\\"Sistemas Distribuidos\\\\\\\\n\\\\\\\");
write(conexion,&peticion,sizeof(peticion));
read(conexion, &respuesta, sizeof(respuesta));
printf(\\\\\\\"CLI:respuesta: %s\\\\\\\\n\\\\\\\", respuesta.mensaje);
close(conexion);
}
El segundo codigo: Data
struct PDU {
char cabeza;
char mensaje[100];
};
El tercer codigo: Servidor
#include \\\\\\\"./data.h\\\\\\\"
#include <math.h>
#include <stdio.h>
#include <string.h>
extern acepta_conexion();
extern call_on_sock();
main()
{
int dirlisten, conexion,porto;
struct PDU peticion, respuesta;
printf(\\\\\\\"Servido 2 escuchando en puerto 5555\\\\\\\\n\\\\\\\");
dirlisten=socket_servidor(5555);
while(1){
printf(\\\\\\\"SER:** esperando clientes ****\\\\\\\\n\\\\\\\");
while((conexion=acepta_conexion(dirlisten))<0);
read(conexion, &peticion, sizeof(peticion));
printf(\\\\\\\"SER:DATO:%s\\\\\\\\n\\\\\\\",peticion.mensaje);
strcpy(respuesta.mensaje,\\\\\\\"ACK de servidor\\\\\\\");
write(conexion, &respuesta, sizeof(respuesta));
close(conexion);
}
}
Y por ultimo : Socket Original
#include <sys/types.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <ctype.h>
#define NOBLOCK 0x0FFFB
extern int errno;
int
socket_servidor(side)
int side;
{
struct sockaddr_in server;
int sock, x, flags;
sock= socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror (\\\\\\\"no able of creat socket\\\\\\\");
exit (1);
}
bzero(&server, sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(side);
x = bind(sock, &server, sizeof(server));
if (x<0){
close(sock);
perror(\\\\\\\"no bbind\\\\\\\");
exit(1);
}
if (listen(sock, 5) < 0) {
perror (\\\\\\\"no listen\\\\\\\");
exit (1);
}
return sock;
}
int
acepta_conexion(sock)
int sock;
{
struct sockaddr_in server;
int adrl, x, flags;
adrl = sizeof (struct sockaddr_in);
x = accept (sock, &server, &adrl);
return x;
}
/*********** cliente ***********************/
int
socket_cliente(host, port)
char *host;
int port;
{
int csock;
struct sockaddr_in client;
struct hostent *hp, *gethostbyname();
bzero(&client, sizeof(client));
client.sin_family = AF_INET;
client.sin_port = htons(port);
if (isdigit(host[0]))
client.sin_addr.s_addr = inet_addr(host);
else {
hp = gethostbyname(host);
if (hp == NULL) {
perror (\\\\\\\" which host ? \\\\\\\");
exit (1);
}
bcopy(hp->h_addr, &client.sin_addr, hp->h_length);
}
csock = socket(AF_INET, SOCK_STREAM, 0);
if (csock < 0) {
perror (\\\\\\\"no able of creat socket\\\\\\\");
exit (1);
}
connect(csock, &client, sizeof(client));
return csock;
}
Espero tu respuesta.. ya que de este codigo depende un ramo de la universidad!
:(
Gracias de ante Mano