Ir para conteúdo
Fórum Script Brasil
  • 0

Servidor Multi-Thread Socket


ce1o2e

Pergunta

estou liberando um codigo multi thread para os novatos em socket como eu :mellow:

o codigo consiste em um servidor que aceita varias conexão mostrando o ip do client e tambem quantos player online no servidor bem legal, o client pode ser feito rapidamente tambem lembrando que o codigo e basico nada de mais

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <winsock.h>
#include <conio.h>

int player = 0;
int ip = 0;

DWORD WINAPI receive_cmds(LPVOID);  

int main()
{

 DWORD thread;
  
 WSADATA data;
 SOCKET winsock;
 SOCKADDR_IN sock;

 printf("servidor multi-threaded connectado\n\n"); 

 if((WSAStartup(0x101, &data)) == SOCKET_ERROR)
 {
  printf("\nerro ao iniciar socket");
  getch();
  exit(1);
 }


 sock.sin_family = AF_INET; 
 sock.sin_addr.s_addr = INADDR_ANY; 
 sock.sin_port=htons(4000);
  
 if((winsock = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR)
 {
     printf("\nerro ao criar socket");
     getch();
     exit(1);
 }
  
 if(bind(winsock,(SOCKADDR*)&sock,sizeof(sock)) == SOCKET_ERROR)
 {
     printf("\nerro ao acessar rede");
     getch();
     exit(1);
 }
  
 if(listen(winsock, 5) != 0)
 {
    printf("\nerro ao criar lista de socket");
    getch();
    exit(1);
 }

 SOCKET client;

 SOCKADDR_IN from;
 int fromlen = sizeof(from); 
  
 while(true)
 { 
  client = accept(winsock,(struct sockaddr*)&from, &fromlen);
  
  ip = (int)inet_ntoa(from.sin_addr);
  printf("ip: %s\n", ip);
  
  CreateThread(NULL, 0, receive_cmds, (LPVOID)client, 0, &thread);  
 }

 closesocket(winsock); 
 WSACleanup(); 

 return 0;
}

DWORD WINAPI receive_cmds(LPVOID lpParam) 
{
  SOCKET current_client = (SOCKET)lpParam; 

  char recebe[1024];
  char enviar[1024];
  
  int byte;
  
  player++;
  printf("client connectado\r\n");
  printf("%d player online\n\n", player);
  
  while(true)
  {
   memset(recebe, 0, 1024);
   byte = recv(current_client, recebe, 1024, 0);
   
   if(byte == -1)
   {
    player--;
    printf("player %s desconectado\n", ip);
    printf("%d player online\n\n", player);
    break;
   }
  } 
   
  closesocket(current_client);
}

o codigo base peguei de um outro forum e editei a maior parte dele mais esta funcionando 100% e um bom codigo para implementar em jogos ou fazer um pequeno sistema de chat vlw galera

se gosto agradeça :closedeyes:

Editado por ce1o2e
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Eu tentei compilar aqui mas não deu certo... Acho que vou baixar o Dev-C++... é o dev-C++ que você está utilizando ?

Dependendo do que ele usar da conio.h (não li o código com detalhes), você vai precisar do C++ Builder.

No mínimo, terá que linkar a biblioteca wsock32.lib no "compilador" de sua preferência.

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0
Eu tentei compilar aqui mas não deu certo... Acho que vou baixar o Dev-C++... é o dev-C++ que você está utilizando ?

sim e sim usei dev c++ e add a lib libwsock2.a no option ^^

Dependendo do que ele usar da conio.h (não li o código com detalhes), você vai precisar do C++ Builder.

No mínimo, terá que linkar a biblioteca wsock32.lib no "compilador" de sua preferência.

eu estou usando o getch(); para press enter poderia usar o cin.get(); tambem

Editado por ce1o2e
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...