Bueno el problema es que el servidor 1 me tiene que enviar datos a mi, para que yo pueda enviarle datos a el
Código:#include <stdio.h> #include <winsock.h> #include <string.h> #include <conio.h> #define puerto 190 main(){ //variables WSADATA wsa; int sock,conectado; char buffer[1024]="",bienvenido[22]="welcome to my server"; struct sockaddr_in server; WSAStartup(MAKEWORD(2,0),&wsa); if((sock=socket(AF_INET,SOCK_STREAM,0))<0){; // creamos el socket printf("Error creando el socket, saliendo…"); getch(); exit(0); } server.sin_family= AF_INET; // familia socket server.sin_addr.s_addr=INADDR_ANY; server.sin_port=htons(puerto); //Puerto if(bind(sock,(struct sockaddr *)&server,sizeof(server))<0 ){//bindeamos… printf("error asociando socket al puerto…"); getch(); exit(0); } printf("En escucha"); listen(sock,1); // nos kedamos a la eskuxa con una cola de maximo 5 clientes if((conectado=accept(sock,0,0))<0){ printf("error aceptando connexion"); exit(0); } if(send(conectado,bienvenido,sizeof(bienvenido),0)<0){ // printf("error enviando msg de bienvenida"); exit(0); } if(recv(conectado,buffer,sizeof(buffer),0)==-1){ printf("error reciviendo"); exit(0); } printf("mensaje del cliente: %s\n",buffer); getch(); memset(buffer,0,sizeof(buffer)); // esta funcion vacia getch(); closesocket(conectado); //cerramos el socket. return 0; }
Si quito la funcion enviar adios, el cliente ya no conecta
La misma situacion si quito el recv de el clienteif(send(conectado,bienvenido,sizeof(bienvenido),0) <0){ //
printf("error enviando msg de bienvenida");
exit(0);
}
Aqui el codigo cliente;
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>
#define ip "127.0.0.1" //ip del servidor al ke konectar
#define puerto 190 //puerto del server
int main()
{
WSADATA wsa;
int sock;//descriptor del socket.
struct sockaddr_in direccion; //datos del servidor al ke konectaremos
char buffer[1024]; //bufer donde guardaremos lo ke nos envie el Server.
char cadena[1024]; // la info ke enviaremos al Server.
WSAStartup(MAKEWORD(2,0),&wsa);
if((sock=socket(AF_INET,SOCK_STREAM, 0))<0 ){ // obtenemos el descriptor del socket
printf("problema al crear el stock");
getch();
exit(0);
}
else{
printf("socket creado con exito");
direccion.sin_family=AF_INET;// protocolo af inet, visto antes.
direccion.sin_port=htons(puerto);//htons convierte el puerto al formato de red.
direccion.sin_addr.s_addr=inet_addr(ip);
//conectamos al servidor
if(connect(sock,(struct sockaddr*)&direccion,sizeof(direccion))<0){
printf("error conectando…");
getch();
exit(0);
}
if(recv(sock,buffer,sizeof(buffer),0)==-1){
printf("Error recibiendo msg, saliendo…");
exit(0);
}
printf("conectado al servidor\n");
printf("Mensagje a enviar: ");
while(strcmp(cadena,"salir")){
gets(cadena);
if(send(sock,cadena,strlen(cadena),0)==-1){
printf("error enviando msg, cerrando…");
getch();
exit(0);
}
}
printf("\nMensage enviado. Esperando respuesta…");
printf("Mensaje recibido: %s",buffer);
getch();
}
return 0;
}
si quito recv ya me puedo ir olvidando de enviar nada
if(recv(sock,buffer,sizeof(buffer),0)==-1){
printf("Error recibiendo msg, saliendo…");
exit(0);
}
Pues ya ven mas claro creeo que no se puede ser, haber si alguien me puede ayudar ya que yo no doy con la solucion, hace poco emepeze con esto de los socket y con la basica y muy mala explicacion que dispongo no puedo solucionar el problema.
El code origanal es de un tal Berty el cual tenia un monton de fallos que yo e corregido, pero pude ser que berty no tubiera mucha idea de socket, la misma que yo mas o menos, y en la funcion conect o alguna otra hubiera un fallo y por eso el cliente deve recivir datos del servidor para posteriormente enviar del cliente al servidor.
Marcadores