Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: davidzelaya en 13 Septiembre 2012, 06:45 am



Título: Socket en Dev c++
Publicado por: davidzelaya en 13 Septiembre 2012, 06:45 am
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..