Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Plástico Bolha

[Resolvido] Socket DevC++

Recommended Posts

Ola, eu estou tendo dificuldades para criar um socket que envie dados como txt ou uma string ou qualquer outra coisa que seja enviada no DevC++, eu ja sei das estruturas do socket, como elas funcionam, e cada tópico que eu vejo, o socket é criado de uma maneira diferente, parece que não segue um padrão, aparentemente cada socket é feito de uma maneira, apesar de permanecer algumas linhas de código "em quase todos os exemplos como": "nome = socket(AF_INET, SOCK_STREAM, 0);". Para começar a criar um socket que compile no DevC++.

 

main(){
int e_socket;
struct sockaddr_in destino;
e_socket = socket(AF_INET,SOCK_STREAM,0);
if(e_socket < 0)
{
perror("Socket");
exit(1);
}
destino.sin_family = AF_INET;
destino.sin_port = htons(xxxxxx);
destino.sin_addr.s_addr = inet_addr("xxxxxxxx");
bzero(&(destino.sin_zero),8);
... 

Até aqui vai, mas depois como proceder para enviar um arquivo de texto ou nome ou enviar dados de maneira geral ?

 

Obrigado desde já pela paciência ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos lá,

 

Os sockets não são "do DevC++", e sim parte do sistema. DevC++ é so um IDE pra windows, certo?

 

Bom, antes de programar sockets, temos que saber se o seu programa tem que ser multi plataforma (windows, linux, mac...) ou somente windows. Isso é muito importante e faz toda a diferença.

 

Se for somente para windows, vai ter que usar a biblioteca do windows para sockets. Como eu não uso windows (mas sim mac), não tenho a menor ideia de como funciona a biblioteca para sockets dele, por isso aqui vão uns materiais de referência: http://www.adp-gmbh.ch/win/misc/sockets.html, http://www.codeproject.com/KB/IP/beginningtcp_cpp.aspx, http://www.inf.pucrs.br/~cnunes/redes_si/Sockets.htm, etc. Acho que a msdn.com também possa te ajudar.

 

Se for multi plataforma,

 

o melhor é procurar uma biblioteca de C/C++ multi plataforma. Como eu só programo em c++, vou te passar algumas bibliotecas muito boas em c++ para isso: http://pocoproject.org/, http://www.boost.org/, etc.

Vai dar trabalho sim, mas não é nenhum bicho de sete cabeças.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sei que devC++ é um compilador so fui enfático. ^^

E confirmando estou falando do Windows :)

 

Não parece muito ser enfático, mas tanto faz.

 

Veja os links que te passei, e estude na MSDN a API do windows para sockets.

 

Ou então procure uma lib para isso, como: http://www.alhem.net/Sockets/, http://netclass.sourceforge.net/, etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou fazer conforme você falou. Vou ir no msdn, e vou ler o que puder arrespeito disso. Não tenho pratica nenhuma em socket :mellow:, nem professor xD. Mas vou tentar fazer uma transmissão de dados simples. Vou postando conforme as dúvidas forem surgindo. Obrigado pela atenção :lol:.

 

T++

 

Peguei esse exemplo no msdn pra tentar compilar no DevC++: Aqui esta o link aonde eu peguei esse exemplo do msdn http://msdn.microsoft.com/en-us/library/ms740149%28v=vs.85%29.aspx

 

#ifndef UNICODE

#define UNICODE

#endif

 

#define WIN32_LEAN_AND_MEAN

 

#include <winsock2.h>

#include <Ws2tcpip.h>

#include <stdio.h>

 

// Link with ws2_32.lib

#pragma comment(lib, "Ws2_32.lib")

 

#define DEFAULT_BUFLEN 512

#define DEFAULT_PORT 27015

 

int main() {

 

//----------------------

// Declare and initialize variables.

int iResult;

WSADATA wsaData;

 

SOCKET ConnectSocket = INVALID_SOCKET;

struct sockaddr_in clientService;

 

int recvbuflen = DEFAULT_BUFLEN;

char *sendbuf = "Client: sending data test";

char recvbuf[DEFAULT_BUFLEN] = "";

 

//----------------------

// Initialize Winsock

iResult = WSAStartup(MAKEWORD(2,2), &wsaData);

if (iResult != NO_ERROR) {

wprintf(L"WSAStartup failed with error: %d\n", iResult);

return 1;

}

 

//----------------------

// Create a SOCKET for connecting to server

ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (ConnectSocket == INVALID_SOCKET) {

wprintf(L"socket failed with error: %ld\n", WSAGetLastError());

WSACleanup();

return 1;

}

 

//----------------------

// The sockaddr_in structure specifies the address family,

// IP address, and port of the server to be connected to.

clientService.sin_family = AF_INET;

clientService.sin_addr.s_addr = inet_addr( "127.0.0.1" );

clientService.sin_port = htons( DEFAULT_PORT );

 

//----------------------

// Connect to server.

iResult = connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) );

if (iResult != 0) {

wprintf(L"connect failed with error: %d\n", WSAGetLastError() );

closesocket(ConnectSocket);

WSACleanup();

return 1;

}

 

//----------------------

// Send an initial buffer

iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 );

if (iResult != 0) {

wprintf(L"send failed with error: %d\n", WSAGetLastError());

closesocket(ConnectSocket);

WSACleanup();

return 1;

}

 

printf("Bytes Sent: %d\n", iResult);

 

// shutdown the connection since no more data will be sent

iResult = shutdown(ConnectSocket, SD_SEND);

if (iResult != 0) {

wprintf(L"shutdown failed with error: %d\n", WSAGetLastError());

closesocket(ConnectSocket);

WSACleanup();

return 1;

}

 

// Receive until the peer closes the connection

do {

 

iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);

if ( iResult > 0 )

wprintf(L"Bytes received: %d\n", iResult);

else if ( iResult == 0 )

wprintf(L"Connection closed\n");

else

wprintf(L"recv failed with error: %d\n", WSAGetLastError());

 

} while( iResult > 0 );

 

 

// close the socket

iResult = closesocket(ConnectSocket);

if (iResult != 0) {

wprintf(L"close failed with error: %d\n", WSAGetLastError());

WSACleanup();

return 1;

}

 

WSACleanup();

return 0;

}

 

Meu erro foi com undefined referene to "WSA ...". Ou seja problema de link e com relação a link do socket, (Detalhe: Eu nunca consegui compilar no DevC++ "nada" que tivesse socket porque sempre da esse mesmo erro de link), E tambem eu adicionei ao projeto "toda" a pasta lib. O que fazer nesse caso ?

 

Obrigado

 

Compilador apontou os erros:

 

Compilador: Default compiler

Building Makefile: "C:\Users\Raul\Desktop\Makefile.win"

Executando make...

make.exe -f "C:\Users\Raul\Desktop\Makefile.win" all

gcc.exe -c main.c -o main.o -I"C:/Dev-Cpp/include"

 

gcc.exe main.o -o "Projeto1.exe" -L"C:/Dev-Cpp/lib"

 

main.o(.text+0x8f):main.c: undefined reference to `WSAStartup@8'

main.o(.text+0xd9):main.c: undefined reference to `socket@12'

main.o(.text+0xf0):main.c: undefined reference to `WSAGetLastError@0'

main.o(.text+0x105):main.c: undefined reference to `WSACleanup@0'

main.o(.text+0x129):main.c: undefined reference to `inet_addr@4'

main.o(.text+0x13e):main.c: undefined reference to `htons@4'

main.o(.text+0x168):main.c: undefined reference to `connect@12'

main.o(.text+0x179):main.c: undefined reference to `WSAGetLastError@0'

main.o(.text+0x197):main.c: undefined reference to `closesocket@4'

main.o(.text+0x19f):main.c: undefined reference to `WSACleanup@0'

main.o(.text+0x1e0):main.c: undefined reference to `send@16'

main.o(.text+0x1f1):main.c: undefined reference to `WSAGetLastError@0'

main.o(.text+0x20f):main.c: undefined reference to `closesocket@4'

main.o(.text+0x217):main.c: undefined reference to `WSACleanup@0'

main.o(.text+0x24f):main.c: undefined reference to `shutdown@8'

main.o(.text+0x260):main.c: undefined reference to `WSAGetLastError@0'

main.o(.text+0x27e):main.c: undefined reference to `closesocket@4'

main.o(.text+0x286):main.c: undefined reference to `WSACleanup@0'

main.o(.text+0x2bf):main.c: undefined reference to `recv@16'

main.o(.text+0x2f9):main.c: undefined reference to `WSAGetLastError@0'

main.o(.text+0x31f):main.c: undefined reference to `closesocket@4'

main.o(.text+0x330):main.c: undefined reference to `WSAGetLastError@0'

main.o(.text+0x345):main.c: undefined reference to `WSACleanup@0'

main.o(.text+0x356):main.c: undefined reference to `WSACleanup@0'

collect2: ld returned 1 exit status

 

make.exe: *** [Projeto1.exe] Error 1

 

Execução terminada

 

Detalhe: Eu consigo compilar isso no Visual C++. Mas eu queria compreender porque não consigo fazer isso no DevC++, mesmo com as libs e h(s) corretas adicionadas ao meu projeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente em relação a isso não posso ser de muita ajuda, já que não uso windows, e muito menos DevC++.

 

Talvez seja mais simples se você somente usar uma lib em C++ para isso ˆˆ

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara . nao sei se ajuda .. mas tenta os compilar os codigos que o @bl00dshooter te passou nakeles links usando o Code::Blocks (http://www.codeblocks.org/home) ..

 

com ele instalado e aberto , faça o seguinte para poder compilar o codigo:

 

Settings > Compiler and Debugger > Linker Settings > Other Linker Options > -lws2_32

 

ou entao .. se você nao quiser mudar de IDE .. tente isso no DevC++ (porem nao sei se irá funcionar):

 

Tools > Compiler Options > Add linker -lws2_32

 

espero que ajude !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara . nao sei se ajuda .. mas tenta os compilar os codigos que o @bl00dshooter te passou nakeles links usando o Code::Blocks (http://www.codeblocks.org/home) ..

 

com ele instalado e aberto , faça o seguinte para poder compilar o codigo:

 

Settings > Compiler and Debugger > Linker Settings > Other Linker Options > -lws2_32

 

ou entao .. se você nao quiser mudar de IDE .. tente isso no DevC++ (porem nao sei se irá funcionar):

 

Tools > Compiler Options > Add linker -lws2_32

 

espero que ajude !!

 

Você ajudou o erro era exatamente esse bastou adicionar o "-lws2_32" e pronto compilou :clap:. Agora tenho outro probleminha :ermm: ... Ele compila isso beleza. Mas ele não cria executavel :mellow:. Estou pesquisando mas se souber essa da uma mão, valeu ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você ajudou o erro era exatamente esse bastou adicionar o "-lws2_32" e pronto compilou :clap:. Agora tenho outro probleminha :ermm: ... Ele compila isso beleza. Mas ele não cria executavel :mellow:. Estou pesquisando mas se souber essa da uma mão, valeu ;)

 

Tente compilar via console...

Iniciar Executar -> cmd -> ok

[iNSIRA OS COMANDOS ABAIXO]

cd "C:\caminhoqueestaocodigo"

c:\dev-cpp\bin\gcc seucodigo.cpp -l wsock32 -o seucodigo.exe

dir *.exe

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.