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.. |