seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^

Participe do fórum, é rápido e fácil

seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Você não está conectado. Conecte-se ou registre-se

[tutorial] socket em c - recv e send (windows)

Ir para baixo  Mensagem [Página 1 de 1]

Kodo no Kami

Kodo no Kami
master
master

bom galera continuando o tutorial de socket em c, agora vamos ver como envia e recebe dados por ele, veja o servidor e o cliente q agente fez

servidor:
Código:
#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib, "wsock32")

int main(void)
{
  int socket1, tam;
  struct sockaddr_in local;
  struct sockaddr_in remoto;

  WSADATA wsa;
  WSAStartup(MAKEWORD(2,0),&wsa);

  socket1 = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

  local.sin_family = AF_INET;
  local.sin_addr.s_addr = INADDR_ANY;
  local.sin_port = htons(315);

  bind(socket1,(struct sockaddr *)&local,sizeof(local));
  listen(socket1,2);
  accept(socket1,(struct sockaddr *)&remoto,&tam);
 
  printf("conecto - server by hacker fts315");

  closesocket(socket1);
}

cliente:
Código:
#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib, "wsock32")

int main(void)
{
  int socket1;
  struct sockaddr_in servidor;
 
  WSADATA wsa;
  WSAStartup(MAKEWORD(2,0),&wsa);
 
  socket1 = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 
  servidor.sin_family = AF_INET;
  servidor.sin_addr.s_addr = inet_addr("127.0.0.1");
  servidor.sin_port = htons(315);
 
  connect(socket1,(struct sockaddr *)&servidor,sizeof(servidor));
 
  closesocket(socket1);
}

no nosso servidor agente vai criar mais uma variavel do tipo int e atribuir o accept a ela no meu caso criei uma chamada socket2, depois disso agente vai criar um loop infinito vou usar o while para evitar q o programa finalize

Código:
#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib, "wsock32")

int main(void)
{
  int socket1, tam , socket2;
  struct sockaddr_in local;
  struct sockaddr_in remoto;

  WSADATA wsa;
  WSAStartup(MAKEWORD(2,0),&wsa);

  socket1 = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

  local.sin_family = AF_INET;
  local.sin_addr.s_addr = INADDR_ANY;
  local.sin_port = htons(315);

  bind(socket1,(struct sockaddr *)&local,sizeof(local));
  listen(socket1,2);
  socket2 = accept(socket1,(struct sockaddr *)&remoto,&tam);
 
  printf("conecto - server by hacker fts315");

  while(1)
  {
  }
 
  closesocket(socket1);
}

agora basta criar uma array para receber os dados vou chamar a minha de texto, depois usar a funçao recv para receber os dados, passamos como argumento para ele a variavel q atribuimos ao accept, depois a array q vai receber os dados no meu caso e o texto, o tamanho maximo recebido vou colocar 1000, e depois um 0

Código:
#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib, "wsock32")

int main(void)
{
  int socket1, tam , socket2;
  char texto[1000];
  struct sockaddr_in local;
  struct sockaddr_in remoto;

  WSADATA wsa;
  WSAStartup(MAKEWORD(2,0),&wsa);

  socket1 = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

  local.sin_family = AF_INET;
  local.sin_addr.s_addr = INADDR_ANY;
  local.sin_port = htons(315);

  bind(socket1,(struct sockaddr *)&local,sizeof(local));
  listen(socket1,2);
  socket2 = accept(socket1,(struct sockaddr *)&remoto,&tam);
 
  printf("conecto - server by hacker fts315\n\n");

  while(1)
  {
    recv(socket2,texto,1000,0);
    printf("%s \n",texto);
  }
 
  closesocket(socket1);
}

o recv permite receber os dados, ja o send permite enviar, no meu exemplo eu to usando o servidor apenas para receber e exibir os dados e o cliente apena para enviar mais pode ser usado o recv e send em ambos, veja o cliente com uma entrada de dados do teclado e depois enviando para o servidor e ele exibindo, os argumentos do send e parecido com o recv

Código:
#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib, "wsock32")

int main(void)
{
  int socket1, tam;
  char texto[1000];
  struct sockaddr_in servidor;
 
  WSADATA wsa;
  WSAStartup(MAKEWORD(2,0),&wsa);
 
  socket1 = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
 
  servidor.sin_family = AF_INET;
  servidor.sin_addr.s_addr = inet_addr("127.0.0.1");
  servidor.sin_port = htons(315);
 
  connect(socket1,(struct sockaddr *)&servidor,sizeof(servidor));
 
  while(1)
  {
    printf("> ");
    gets(texto);
    send(socket1,texto,1000,0);
  }
 
  closesocket(socket1);
}

bom galera isso e o basico existe outras coisas q da para fazer outras funçoes etc, talvez eu faça outra tutorial ^^

by hacker fts315

https://endoffile.umforum.net

Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos