C sockets

tiagokito

Membro
Viva pessoal, sou novo aki, ainda nem sei bem como isto funciona :/
Desculpem a ignorancia..

Estou na iniciação da utilizacao de sockets em C (apesar de já perceber alguma coisa de C n percebo nada d sockets), e gostaria que alguem disponibiliza-se algum site com um bom exemplo explicado sobre este assunto...

outra duvida que tenho é, quando s trata d sockets, a main recebe como argumentos, argc e argv... Estes argumentos referem-se ao ficheiro que será enviado através dos sockets?

Cumprimentos, muito obrigado
 
Viva pessoal, sou novo aki, ainda nem sei bem como isto funciona :/
Desculpem a ignorancia..

Estou na iniciação da utilizacao de sockets em C (apesar de já perceber alguma coisa de C n percebo nada d sockets), e gostaria que alguem disponibiliza-se algum site com um bom exemplo explicado sobre este assunto...

outra duvida que tenho é, quando s trata d sockets, a main recebe como argumentos, argc e argv... Estes argumentos referem-se ao ficheiro que será enviado através dos sockets?

Cumprimentos, muito obrigado
http://www.beej.us/guide/bgnet/output/html/multipage/index.html
Este guia é porreiro, supondo que percebas inglês.

Se tiveres dúvidas posso-te ajudar.
 
outra duvida que tenho é, quando s trata d sockets, a main recebe como argumentos, argc e argv... Estes argumentos referem-se ao ficheiro que será enviado através dos sockets?

No programa és tu que defines o que queres. Se quiseres receber o argumentos que influenciem o canal de comunicação isso é contigo, dado que podes sempre definir isso dentro do código.

Em relação a poderes perceber alguma coisa de sockets, este (http://homepage.swissonline.ch/barnski/Winsock-Basics.html) dá-te uma ideia do que são sockets (em Windows), e este (http://energon.home.mindspring.com/tutorials/socket/socket_tutorial.html) diz tudo o resto. Tem código explicado detalhadamente para que possas perceber mais facilmente.
 
Bem pessoal, comecei a ler os tutoriais que recomendaram :)

Mas desde o inicio que tive um problema :/

Segui o codigo de uma pagina web, que ate este ponto n deveria dar problemas:

Código:
#if defined WIN32
#include <winsock.h>
#elif defined __linux__
#include <unistd.h>
#endif
 
#include <string.h>
#include <stdio.h>
int start_server()
{
    return 0;
}
 
int start_client()
{
    return 0;
}
 
int proc_arguments(int n, char* args[])
{
    if(2 == n) {
        if(0 == strcmp(args[1], "-s"))
            return 1;
        else if(0 == strcmp(args[1], "-c"))
            return 2;
    }
    return 0;
}
 
int main(int argc, char* argv[])
{
 #if defined WIN32
    WSADATA wsa_data;
    WSAStartup(MAKEWORD(1,1), &wsa_data);
 switch(proc_arguments(argc, argv))
    {
    case 0:
        printf("Usage: socket_tutorial [option]\n");
        printf("Options:\n");
        printf("-c - start a client\n");
        printf("-s - start a server\n\n");
        break;
    case 1:
        start_server();
        break;
    case 2:
        start_client();
        break;
    }
 #endif
 #if defined WIN32
    WSACleanup();
 #endif
 
    return 0;
}


Erros:
Linking...
main.obj : error LNK2001: unresolved external symbol _WSACleanup@0
main.obj : error LNK2001: unresolved external symbol _WSAStartup@8
Debug/Teste Sockets.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Teste Sockets.exe - 3 error(s), 0 warning(s)


Mas surgiram me erros, não d compilacao, mas sim quando tento executar o programa... Utilizo o Visual Studio 6.0, e windows XP home... Sera que me podem ajudar ? :)

Obrigado a todos
 
You'll also want to ensure that it's linked against this library only: wsock32.lib
If you're unsure of how to link to a library in your compiler, find some documentation and read. It's under the Project->Settings tab in the menu of MSVC++. Make sure that all build of your program link to this and not just the Debug/Release versions.
Tens de ler com mais cuidado os tutoriais. :p
 
Boas...
Já estou mais adiantado neste assunto, mesmo assim ainda com algumas duvidas :p

Tenho andado entao em testes, mas surgiu me um problema (nem tanto a ver com os sockets, mas sim com o compilador), que é, quando estou no compilador (Visual Studio) o programa executa sem qualquer problema, mas quando tento executar o programa a partir do ficheiro executavel que é criado na pasta Debug do projecto, apenas me aparece a janela do DOS e volta a desaparecer instantaneamente, e sem apresentar sequer qualquer tipo de erro, apenas desaparece...

Alguem sabe qual poderá ser o problema?

Obrigado
Cumps
 
Boas, ja consegui resolver o problema :)
Era o seguinte, como o meu programa utilizava a funcao main a receber argumentos:
int main(int argc, char* argv[]), ao executar o programa directamente do seu executavel (em vez de o executar a partir do DOS) criava-me esse problema. O que fiz foi colocar a main a não receber quaisquer argumento (int main() ), e no resto do programa onde tinha argv[0] coloqueia porta a utilizar e onde tinha argv[1] coloquei localhost....

Não percebi muito bem como eh que esta substituicao funcionou, mas o que interessa foi que funcionou :p

Se alguem quiser comentar para discutir esta solucao, agradeco :)

Cumps
 
Ate podiam falar sobre a solucao que lancei nao?!?! :P

Tipo, eh que n fikei a perceber bem a razao pela qual aquilo passou a funcionar, fazendo apenas com que a funcao main n recebesse aqueles argumentos :confused:

Cumps
 
eu ando a trabalhar com sockets tambem , mas isto nao esta facil :(
alguem me sabe dizer se é possivel passar uma estrutura completa do client para o serv para que depois o serv possa extrair os dados????
 
eu ando a trabalhar com sockets tambem , mas isto nao esta facil :(
alguem me sabe dizer se é possivel passar uma estrutura completa do client para o serv para que depois o serv possa extrair os dados????

Eu acho é que em vez de lerem sobre o assunto, perceberem como funcionam os sockets, colocam aqui "dúvidas". :zzz:

Pensa bem no que é que consegues colocar no canal? Pensa num caso simples em que precisas de enviar um array de inteiros, como é que fazias isso? Creio que este exercício te ajudará a perceber como envias uma estrutura pelo socket.
 
Erros:
Linking...
main.obj : error LNK2001: unresolved external symbol _WSACleanup@0
main.obj : error LNK2001: unresolved external symbol _WSAStartup@8
Debug/Teste Sockets.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Teste Sockets.exe - 3 error(s), 0 warning(s)


Mas surgiram me erros, não d compilacao, mas sim quando tento executar o programa... Utilizo o Visual Studio 6.0, e windows XP home... Sera que me podem ajudar ? :)

Obrigado a todos

Tens que incluir wsock32.lib no projecto.
 
Back
Topo