1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

C sockets

Discussão em 'Programação' iniciada por tiagokito, 22 de Novembro de 2007. (Respostas: 18; Visualizações: 1262)

  1. 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
     
  2. napalm

    napalm Power Member

    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.
     
  3. Consu

    Consu Power Member

    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.
     
  4. 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 [email protected]
    main.obj : error LNK2001: unresolved external symbol [email protected]
    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
     
  5. Consu

    Consu Power Member

    Tens de ler com mais cuidado os tutoriais. :p
     
  6. Pois, eu li isso, mas não entendi :S Fui la a settings, mas n encontrei a opcao para n fazer o link apenas para versoes Debug/Release... :S
     
  7. 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
     
  8. saunde

    saunde Power Member

    Põe isto no final da main... para ele não sair logo da consola..

    system("PAUSE");
     
  9. Baderous

    Baderous Banido

    Já foi mais que discutido neste fórum que o uso de system("PAUSE") é totalmente desaconselhado! Em alternativa pode-se usar o getchar(); .
     
  10. 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
     
  11. saunde

    saunde Power Member


    Boas.... tive à procura das Threads a falar no assunto e não encontrei, já agora qual o motivo de ser desaconselhado ? Fique curioso..

    Obrigado
     
  12. Baderous

    Baderous Banido

  13. saunde

    saunde Power Member

    Última edição: 28 de Novembro de 2007
  14. 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
     
  15. tiagoix

    tiagoix Power Member

    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????
     
  16. Consu

    Consu Power Member

    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.
     
  17. tiagoix

    tiagoix Power Member

    mandar 1 int ou 1 char eu sei, so perguntei se dava para enviar/receber uma struct de qq coisa, looool...
     
  18. souto

    souto To fold or to FOLD?

    Claro que dá.. :)
     
  19. _jr

    _jr Power Member

    Tens que incluir wsock32.lib no projecto.
     

Partilhar esta Página