Pokaż wyniki 1 do 10 z 15

Temat: serwerek w c...

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie serwerek w c...

    napisałem sobie przed chwilą mały serwer w c i nie moge do nie przesłac zadnych danych bo jest błąd gniazda...a oto kod serwera:

    #include<sys/types.h>
    #include<sys/socket.h>
    #include<netinet/in.h>
    #include<stdio.h>
    #include<unistd.h>
    #include <stdlib.h>



    int main()
    {


    int my_sock, his_sock, size;
    int rozm;
    ssize_t a;
    struct sockaddr_in my_struct, his_struct;
    char buf[1000];
    if ((my_sock = socket ( PF_INET, SOCK_DGRAM, 0))== -1);
    {
    printf("błąd gniazda\n");
    exit(0);
    }
    my_struct.sin_port = htons(4000);
    my_struct.sin_addr.s_addr = htonl( INADDR_ANY );
    if ((bind( my_sock, (struct sockaddr *)&my_struct, sizeof(struct sockaddr_in)))==-1);
    {
    printf("błąd bind");
    exit(0);
    }
    if ((listen(my_sock, 5))==-1);
    {
    printf( "błąd listena" );
    exit(0);
    }
    size = sizeof(struct sockaddr);
    if ((his_sock = accept( my_sock, (struct sockaddr *)&his_struct, ( socklen_t * ) &size))==-1);
    {
    printf("błąd accept");
    exit(0);
    }
    rozm = sizeof ( buf );
    a = recv( my_sock, buf, rozm, 0 );
    while (a <= 0 ) {
    printf( "jest źle\n") ;
    }
    printf(buf);
    close(my_sock);
    return 0;
    }

    co moze byc zle w gniezdzie
    a oto wynik programu:
    lukasz@bash:~$ g++ -o sock sock.c
    sock.c: In function `int main(),:
    sock.c:34: błąd: expected `;' before `exit,
    lukasz@bash:~$ g++ -o sock sock.c
    lukasz@bash:~$ ./sock
    błąd gniazda
    lukasz@bash:~$
    Ostatnio edytowane przez lukasz6547 : 07-18-2008 - 13:33

  2. #2
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie

    Umie ktos programowac

  3. #3
    Zarejestrowany
    Jul 2008
    Postów
    96

    Domyślnie

    Kolejny bezszczelny koles, ledwo co temat zlozyles a juz odswierzasz? myslisz ze komus sie chce przegladac Twoj skopany kod? Wez jakas ksiazke do lapy z podstawami C i jeszcze raz przeanalizuj swoje wypociny. Mialem pomoc, ale tego nie zrobie.

    PS: Tak, umiem i co z tego?
    delete (z ang. skasuj) - w programowaniu obiektowym operator niszczący obiekty utworzone za pomocą operatora new (bądź dowolny obiekt, którego adres można pobrać).

  4. #4
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie

    bo sie zastanawiam nad tym czy jest cos zle z kodem czy ze sprzetem...bo niedawno zaktualizowałem system i mam inną strukture sockadd_in i na początku to troche zametu mi narobiło, a przeceiz do wywołania socket nie jest potrzebna struktur sockaddr_in...wiec wina sprzetu co nie?(masz dziwny nick )nie denerwuj sie, po prostu tak napisałem bo sie dlugo główkuje nad tym i dalej to samo...nawet sprawdzałem w ksiązkach- jest tak samo wywołane socket....
    Ostatnio edytowane przez lukasz6547 : 07-18-2008 - 18:15

  5. #5
    Zarejestrowany
    Jun 2006
    Skąd
    Gdańsk
    Postów
    24

    Domyślnie

    Popieram kolegę "⌂⌂⌂", po prostu jesteś zbyt leniwy by użyć google i/lub przeszukać forum.

    Kod:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    
    int main(void)
    {
    
    int my_sock, his_sock, size;
    int rozm;
    ssize_t a;
    struct sockaddr_in my_struct;
    struct sockaddr_in his_struct;
    char buf[1000];
    
    if ((my_sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    printf("błąd gniazda\n");
    exit(1);
    }
    
    my_struct.sin_family = AF_INET;
    my_struct.sin_port = htons(4000);
    my_struct.sin_addr.s_addr = INADDR_ANY;
    
    if (bind( my_sock, (struct sockaddr *)&my_struct, sizeof(struct sockaddr_in)) == -1) {
    printf("błąd bind\n");
    exit(1);
    }
    
    if (listen(my_sock, 5) == -1) {
    printf("błąd listena\n");
    exit(1);
    }
    
    size = sizeof(struct sockaddr);
    if ((his_sock = accept( my_sock, (struct sockaddr *)&his_struct, ( socklen_t * ) &size))==-1) {
    printf("błąd accept\n");
    exit(1);
    }
    rozm = sizeof ( buf );
    a = recv( my_sock, buf, rozm, 0 );
    while (a <= 0 ) {
    printf("jest źle\n");
    }
    printf(buf);
    close(my_sock);
    return 0;
    }
    Kod:
    r@r~> cc dupa8.c -o dupa8
    r@r~> ./dupa8 &
    [1] 3649
    r@r~> netstat -l|grep 4000
    tcp        0      0 *:4000                  *:*                     LISTEN
    Pozdrawiam serdecznie
    M. Raczyński

    E-mail r(at)hack(dot)pl
    WWW http://r.hack.pl/
    IRCNet Marek @ #shellcode
    Gadu-Gadu 1108


  6. #6
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie

    czego zbyt leniwy, pytam sie co jest zle u mnie w programie, a co do tego elementu w strukturze sockaddr_in to nie ma elementu sin_family i to mnie troche zmylilo... a tak wygląda u mnie ta struktura:

    struct sockaddr_in
    {
    __SOCKADDR_COMMON (sin_);
    in_port_t sin_port; /* Port number. */
    struct in_addr sin_addr; /* Internet address. */

    /* Pad to size of `struct sockaddr'. */
    unsigned char sin_zero[sizeof (struct sockaddr) -
    __SOCKADDR_COMMON_SIZE -
    sizeof (in_port_t) -
    sizeof (struct in_addr)];
    };

    co oznacza to wyrażenie: __SOCKADDR_COMMON (sin_);

    ps. nie działa to umnie:
    lukasz@bash:~$ g++ -o sock sock.c
    lukasz@bash:~$ ./sock
    i w tym miejscu powinien byc napis "jest zle" a po przesjkanowaniu portów także nie ma nic...
    Ostatnio edytowane przez lukasz6547 : 07-18-2008 - 20:12

  7. #7

    Domyślnie

    Protokół UDP, gniazda połączone...
    Kod:
    /* Structure describing an Internet socket address.  */
    //struktura opisująca adres gniazda internetowego
    
    struct sockaddr_in
      {
        __SOCKADDR_COMMON (sin_);
        in_port_t sin_port;			/* numer portu.  */
        struct in_addr sin_addr;		/* adres */
    
        /* Pad to size of `struct sockaddr'.  */
        unsigned char sin_zero[sizeof (struct sockaddr) -
    			   __SOCKADDR_COMMON_SIZE -
    			   sizeof (in_port_t) -
    			   sizeof (struct in_addr)];
      };
    __SOCKADDR_COMMON(sin_) jest to makro oznaczające prawdopodobnie rodzine adresów. Zresztą zobacz pierwsza pozycja z google: http://dsrg.mff.cuni.cz/~ceres/sch/o...ch06s01s01.php
    Nie chciało mi się tego czytać nie znam angielskiego...

  8. #8
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie

    tak namotali w tych strukturach ze ciezko sie połapac...jak sie do czegos takiiego odniesc( __SOCKADDR_COMMON (sin_) )i co jest zle z tym moim programem

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj