[tutorial] socket em c - servidor (windows)
Página 1 de 1
[tutorial] socket em c - servidor (windows)
e ae galera nesse tutorial vou ensinar como criar um servidor e cliente em c e c++ usando sockets q fica na biblioteca winsock2.h, vamos começar criando um servidor para isso vamos declarar a biblioteca winsock2.h
lembrando q alguns compiladores ou IDE agente vai ter q linkar o lib wsock32, alguns compiladores aceita a diretiva #pragma comment e passamos como argumento para comment (lib, "wsock32")
mais nem sempre esse treco funciona '-' , outra maneira para isso e ir na configuraçao da IDE e add -l wsock32 em linker ou linkagem, ou compilar pelo prompt caso a sua IDE use o gcc basta compilar pelo prompt adicionando -l wsock32 no final, tipo assim
bom antes de tudo temos q saber oq agente vai criar, no caso aq vai ser um servidor q vai espera uma conexao e dpois exibir uma mesagem e desconectar, ja declaramos a biblioteca agora vamos criar o socket, para isso criamos uma variavel de tipo inteiro e atribuimos a ela a funçao socket, na funçao socket passamos como argumento a arquitetura do socket (family), o tipo de conexao, e protocolo, vamos usar AF_INET na arquitetura e SOCK_STREAM na conexao e protocolo tcp q e IPPROTO_TCP
ja q o socket foi criado agente tambem tem q fechar ele para isso vamos usar closesocket e passar como argumento a variavel q atribuimos a ele
ate agora criamos apenas o socket mais isso nao vai fazer ele se conectar a algo ou algo se conectar a ele, para isso vamos ter q colocar o endereço porta e arquitura e dizer q esse socket vai ficar esperando uma conexao, vamos por partes vamos colocar um endereço, porta e arquitetura, para agente fazer isso temos q usar uma estrutura chamada sockaddr_in para poder usar basta declarar ela, no caso eu chamei essa de local e declarei ela embaixo da variavel socket1
ja declaramos a estrutara agora basta atribuir a ela sin_family e AF_INET, sin_addr.s_addr e INADDR_ANY (isso e qualquer ip), sin_port e a porta vou usar a 315 na porta agente tem q usar uma funçao q e htons
agora vamos usar duas funçoes q sao bind e listen, no bind agente vai passar como argumento o socket, depois a nossa estrutura sockaddr (tambem tem q usar typecast aq para converter), e o tamanho do sockaddr
na funçao listen agente passa como argumento o socket e quantidade de conexao
agora so falta aceitar a conexao e ativar o serviço WSA, para aceitar a conexao temos q criar mais uma variavel do tipo inteiro no meu caso vou chamar de tam e uma outra estrutura sockaddr_in q eu vou chamar de remoto, depois usamos a funçao accept e passamos como argumento o socket a estrutura remoto (temos q usar typecast aq tambem), e a variavel
agora so falta ativar o serviço wsa para funcionar, para isso criamos uma variavel do tipo WSADATA e usamos a funçao WSAStartup e passamos como argumento MAKEWORD(2,0) e a nossa variavel do tipo WSADATA
eu tambem coloquei um printf depois do accept assim q conectar exibe a massagem, so lembrando tambem q eu uso o prompt para compilar minhas sources entao eu nao precisa me preocupar da janela fechar quando executar o programa caso vc execute direto tem q colocar um system("pause") no final do codigo
para testa basta usar o telnet mesmo, abra o prompt e digite
depois vou fazer a segunda parte desse tutorial ensinado como fazer o cliente
by hacker fts315
- Código:
#include <stdio.h>
#include <winsock2.h>
int main(void)
{
}
lembrando q alguns compiladores ou IDE agente vai ter q linkar o lib wsock32, alguns compiladores aceita a diretiva #pragma comment e passamos como argumento para comment (lib, "wsock32")
- Código:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "wsock32")
int main(void)
{
}
mais nem sempre esse treco funciona '-' , outra maneira para isso e ir na configuraçao da IDE e add -l wsock32 em linker ou linkagem, ou compilar pelo prompt caso a sua IDE use o gcc basta compilar pelo prompt adicionando -l wsock32 no final, tipo assim
gcc fts.c -o hack.exe -l wsock32
bom antes de tudo temos q saber oq agente vai criar, no caso aq vai ser um servidor q vai espera uma conexao e dpois exibir uma mesagem e desconectar, ja declaramos a biblioteca agora vamos criar o socket, para isso criamos uma variavel de tipo inteiro e atribuimos a ela a funçao socket, na funçao socket passamos como argumento a arquitetura do socket (family), o tipo de conexao, e protocolo, vamos usar AF_INET na arquitetura e SOCK_STREAM na conexao e protocolo tcp q e IPPROTO_TCP
- Código:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "wsock32")
int main(void)
{
int socket1;
socket1 = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
}
ja q o socket foi criado agente tambem tem q fechar ele para isso vamos usar closesocket e passar como argumento a variavel q atribuimos a ele
- Código:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "wsock32")
int main(void)
{
int socket1;
socket1 = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
closesocket(socket1);
}
ate agora criamos apenas o socket mais isso nao vai fazer ele se conectar a algo ou algo se conectar a ele, para isso vamos ter q colocar o endereço porta e arquitura e dizer q esse socket vai ficar esperando uma conexao, vamos por partes vamos colocar um endereço, porta e arquitetura, para agente fazer isso temos q usar uma estrutura chamada sockaddr_in para poder usar basta declarar ela, no caso eu chamei essa de local e declarei ela embaixo da variavel socket1
- Código:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "wsock32")
int main(void)
{
int socket1;
struct sockaddr_in local;
socket1 = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
closesocket(socket1);
}
ja declaramos a estrutara agora basta atribuir a ela sin_family e AF_INET, sin_addr.s_addr e INADDR_ANY (isso e qualquer ip), sin_port e a porta vou usar a 315 na porta agente tem q usar uma funçao q e htons
- Código:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "wsock32")
int main(void)
{
int socket1;
struct sockaddr_in local;
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);
closesocket(socket1);
}
agora vamos usar duas funçoes q sao bind e listen, no bind agente vai passar como argumento o socket, depois a nossa estrutura sockaddr (tambem tem q usar typecast aq para converter), e o tamanho do sockaddr
- Código:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "wsock32")
int main(void)
{
int socket1;
struct sockaddr_in local;
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));
closesocket(socket1);
}
na funçao listen agente passa como argumento o socket e quantidade de conexao
- Código:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "wsock32")
int main(void)
{
int socket1;
struct sockaddr_in local;
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);
closesocket(socket1);
}
agora so falta aceitar a conexao e ativar o serviço WSA, para aceitar a conexao temos q criar mais uma variavel do tipo inteiro no meu caso vou chamar de tam e uma outra estrutura sockaddr_in q eu vou chamar de remoto, depois usamos a funçao accept e passamos como argumento o socket a estrutura remoto (temos q usar typecast aq tambem), e a variavel
- 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;
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);
closesocket(socket1);
}
agora so falta ativar o serviço wsa para funcionar, para isso criamos uma variavel do tipo WSADATA e usamos a funçao WSAStartup e passamos como argumento MAKEWORD(2,0) e a nossa variavel do tipo WSADATA
- 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);
closesocket(socket1);
}
eu tambem coloquei um printf depois do accept assim q conectar exibe a massagem, so lembrando tambem q eu uso o prompt para compilar minhas sources entao eu nao precisa me preocupar da janela fechar quando executar o programa caso vc execute direto tem q colocar um system("pause") no final do codigo
- 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);
}
para testa basta usar o telnet mesmo, abra o prompt e digite
telnet 127.0.0.1 315
depois vou fazer a segunda parte desse tutorial ensinado como fazer o cliente
by hacker fts315
Tópicos semelhantes
» [tutorial] socket em perl - servidor
» [tutorial] socket em perl - cliente
» [tutorial] basico em css
» [tutorial] namespace
» [tutorial] printf no php?
» [tutorial] socket em perl - cliente
» [tutorial] basico em css
» [tutorial] namespace
» [tutorial] printf no php?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos