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