Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

notanexpert

[Resolvido] Servidor Windows socket C++/C

Mensagens Recomendadas

notanexpert

Boas,

como este é o meu primeiro post neste forum, antes de mais gostaria de cumprimentar os membros.

Vou ao que interessa. Estou a necessitar de um "outro par de olhos" para me orientar na direcção correcta.

Sou um "newbie" em programação, estou a usar o code blocks IDE, tenho a biblioteca ws2_32.lib atribuida ao projecto.

O meu objectivo é criar um servidor em c++/c utilizando o winsock.

Vou ser ainda mais especifico: (o que estou a tentar obter-fazer)

1) O servidor envia mensagem ao cliente quando este se conecta (Welcome, por exemplo)

2) O servidor envia mensagem ao cliente e pede o nome de utilizador

3) Se o nome de utilizador for incorrecto, o cliente é informado e o servidor termina a conecção

4) Se o nome de utilizador for correcto, o servidor envia local time e termina a conecção

Não necessito da parte de cliente pois utilizo o putty (telnet) para aceder ao servidor.

Neste momento tenho a funcionar os 2 primeiros pontos e parte de 4.

O meu problema:

Quando o servidor pede ao cliente o nome de utilizador não consigo guardar os valores da parte do cliente.

Tenho seguido o guia beej guide to network programming, exemplos MSDN e claro google mas não consigo decifrar onde neste momento

está o erro. Como disse anteriormente, se alguem me indicar na direcção correcta agradecia.

BTW, para clarificar este é um projecto não comercial, para complementar trabalho de uma cadeira na universidade e para adquir um pouco de mais conhecimento.

Em baixo deixo o codigo que até agora tenho.

#include <io.h>
#include <stdio.h>
#include <winsock2.h>
#include <time.h>
#include <string.h>
#include <iostream>
#include <windows.h>
#include <ws2tcpip.h>
#include <map>
#include <stdlib.h>

using namespace std;

#pragma comment(lib, "ws2_32.lib") //Winsock library

int main(int argc, char *argv[])
{
WSADATA wsa;
SOCKET s, new_socket;
struct sockaddr_in server, client;
int c;
char *message1; //"welcome" sent via server
char *message2; //"username" request from server

//test++++++++++++++++++++++
char message3[128]; //size of buffer sent via server
char buffer[128];

//++++++++++++++++++++++++++++++++++++++
//char *message4; //"time"
//time_t rawtime;
//struct tm * timeinfo;

//initialize winsock
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
 printf("Failed. Error Code : %d",WSAGetLastError());
 return 1;
}
printf("Initialised.\n");

//Prepare the server address & port
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons( 12345 ); //port to connect

//Creation of socket
if((s = socket(AF_INET, SOCK_STREAM, 0 )) == INVALID_SOCKET)
{
 printf("Could not create socket : %d", WSAGetLastError());
}
printf("Socket created.\n");

//Bind server socket
if( bind(s,(struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR)
{
 printf("Bind failed with error code : %d", WSAGetLastError());
}
puts("Bind done");

//Listen to incoming connections (clients)
listen(s, 1); //s-socket
puts("Waiting for incoming connections...");

//accept client connections
c = sizeof(struct sockaddr_in);
new_socket = accept(s, (struct sockaddr *)&client, &c);
if (new_socket == INVALID_SOCKET)
{
 printf("accept failed with error code : %d", WSAGetLastError());
}
puts("Connection accepted");

//message1 to client
message1 = "Welcome , you are now connected.\r\n"; //message
send(new_socket, message1, strlen(message1), 0); //sends message
puts("Client connected"); //message in server

//message2 to client
message2 = "Please, enter username:\r\n";
send(new_socket, message2, strlen(message2), 0);
puts("Sending username request");

getchar();

//cleanup
closesocket(s);
WSACleanup();

return 0;
}

Editado por apocsantos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.