Socket en Dev c++

Iniciado por davidzelaya, 13 Septiembre 2012, 06:45 AM

0 Miembros y 1 Visitante están viendo este tema.

davidzelaya

Buen dia Estimados tengo una duda con un proyecto de Socket en Dev c++
se trata de colocar un menu mediante switch que elija dos opciones 1. enviando y 2, recibiendo el punto aqui es q no se donde debo implentar este menu.

CLIENTE

#include <iostream>
#include <windows.h>
#pragma comment(lib, "Ws2_32.lib")
#define PUERTO 8080  
WSADATA wsa;
SOCKET cliente;
sockaddr_in remoto;  
int error();  
void menu();
int op();
int main(){
   std::string buffer = "Hola, soy un cliente en C++!";  
   char buffer2[300];
      int bytes_recv;      
if(WSAStartup(MAKEWORD(2,2), &wsa))        
     return error();      
 remoto.sin_family = AF_INET;    
 remoto.sin_port = htons(PUERTO);   // Puerto donde nos conectaremos     //
 remoto.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); // IP del servidor a donde nos conectaremos    
 remoto.sin_addr = *((in_addr*)gethostbyname("localhost")->h_addr); // Host a donde nos conectaremos      
 cliente = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);    // Protocolo TCP      
 if(cliente == INVALID_SOCKET)        
      return error();      
 if(connect(cliente, (sockaddr*)&remoto, sizeof(sockaddr)))// Conectamos con el servidor        
     return error();  
 for(;;){    

    std::cout<<"Mensaje: ";
    std::cin>>buffer;
    send(cliente, buffer.c_str(), buffer.length(), 0);  // Enviamos un saludo      
    Sleep(1000);
    recv(cliente, buffer2, 300, 0);
    if(bytes_recv > 0){
        std::cout<<"Respuesta: "<<buffer2<<std::endl;
    }  
  }
    closesocket(cliente);                                                       // Finalmente desconectamos...      
    WSACleanup();      
 return 0;
}  
int error(){    
      std::cout << "Error #" << GetLastError() << std::endl;    
      WSACleanup();      
      getchar();
   system("PAUSE");          
      return 0;    
}



SERVIDOR

#include <iostream>
#include <windows.h>
#pragma comment(lib, "Ws2_32.lib")
#define PUERTO 8080
 
WSADATA wsa;
SOCKET servidor, nueva_conexion;
sockaddr_in local;
 
int error();
void menu();
void enviando();
int op;  
int main(){
   local.sin_port = htons(PUERTO);            // Puerto a la escucha.
   local.sin_family = AF_INET;            // Debe ser AF_INET.
   local.sin_addr.S_un.S_addr = INADDR_ANY;   // Usar cualquier dirección.
   char Mensaje[300];
   if(WSAStartup(MAKEWORD(2,2), &wsa))
       return error();
 
   servidor = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);   // Protocolo TCP
     
   if(servidor == INVALID_SOCKET)
       return error();
 
   if(bind(servidor, (sockaddr*)&local, sizeof(sockaddr)) == SOCKET_ERROR)
       return error();
 
   if(listen(servidor, 1) == SOCKET_ERROR)     // Colocamos el servidor a la escucha.
       return error();
 
   std::cout << "Servidor a la escucha por el puerto " << PUERTO << ", esperando conexion." << std::endl;
  do{
    nueva_conexion = accept(servidor, NULL, NULL); // Esperamos una conexión entrante y la aceptamos.
  } while(nueva_conexion == SOCKET_ERROR);
    std::string mensaje = "Servidor C++!";
    send(nueva_conexion, mensaje.c_str(), mensaje.length(), 0); // Enviamos un mensaje al cliente conectado
    int bytes_recv;
    char buffer[256];
    memset(buffer, 0, sizeof(buffer)); // Limpiamos el buffer.
   do{   menu();
       cin>>op;
        switch(op){
         case 1:
   
    for(;;){    
        bytes_recv = recv(nueva_conexion, buffer, sizeof(buffer), 0);   // Esperamos para recibir datos...
        if(bytes_recv > 0)
           std::cout << "Buffer: " << buffer << " - Bytes recibidos: " << bytes_recv << std::endl;
        std::cout<<"Enviar Mensaje: ";
        std::cin>>Mensaje;
        send(nueva_conexion, Mensaje, strlen(Mensaje), 0);   // Enviamos un saludo      
        Sleep(1000);  
   }
   closesocket(nueva_conexion);                                    // Lo desconectamos!
 
   WSACleanup();
        system("PAUSE");
   return 0;
}
 
int error(){
   std::cout << "Error #" << GetLastError() << std::endl;
   WSACleanup();
 
   return 0;


espero de su ayuda de antemano mil gracias..