Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 15

Temat: serwerek w c...

  1. #1
    Avatar lukasz6547
    lukasz6547 jest offline Ciasno tu:D
    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:
    [email protected]:~$ g++ -o sock sock.c
    sock.c: In function `int main(),:
    sock.c:34: błąd: expected `;' before `exit,
    [email protected]:~$ g++ -o sock sock.c
    [email protected]:~$ ./sock
    błąd gniazda
    [email protected]:~$
    Ostatnio edytowane przez lukasz6547 : 07-18-2008 - 13:33

  2. #2
    Avatar lukasz6547
    lukasz6547 jest offline Ciasno tu:D
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie

    Umie ktos programowac

  3. #3
    Avatar ⌂⌂⌂
    ⌂⌂⌂ jest offline Poison Null Byte %00
    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
    Avatar lukasz6547
    lukasz6547 jest offline Ciasno tu:D
    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
    Avatar ReMark
    ReMark jest offline Marek Raczyński
    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:
    [email protected]~> cc dupa8.c -o dupa8
    [email protected]~> ./dupa8 &
    [1] 3649
    [email protected]~> 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
    Avatar lukasz6547
    lukasz6547 jest offline Ciasno tu:D
    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:
    [email protected]:~$ g++ -o sock sock.c
    [email protected]:~$ ./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
    Avatar rafal44
    rafal44 jest offline logout
    Zarejestrowany
    Dec 2007
    Postów
    291

    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
    Avatar lukasz6547
    lukasz6547 jest offline Ciasno tu:D
    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

  9. #9
    Avatar rafal44
    rafal44 jest offline logout
    Zarejestrowany
    Dec 2007
    Postów
    291

    Domyślnie

    No wiesz chcą wprowadzić IPv6. Zresztą za dużo na siebie bierzesz. Analizując twoje posty to chcesz dużo się nauczyć w krótkim czasie, a to wyjdzie ci na złe. Też to przechodziłem i mi się wszystko pomieszało. Musisz przeczytać tamat z jakiejś książki, przeszukać google aby dogłębnie poznać temat, a dopiero potem wziąć się za coś innego. Takie są główne powody błędów - lenistwo. I ja też jestem leniwy i to wybitnie, ale uczę się na swoich błędach.

  10. #10
    Avatar lukasz6547
    lukasz6547 jest offline Ciasno tu:D
    Zarejestrowany
    Apr 2008
    Postów
    348

    Domyślnie

    no wrezcie doszedłem co i jak z tą strukturą- wcale nie trzeba tego sin_family w nowej strukturze sockaddr_in, a dodatkowo nie chcaiało mi sie utworzyc gniazdo bo prawdopodbnie cos modziłem przy wywołaniach systemowych(modyfikowałem ) i przeinstalowałem build essential a oto kod dla tych co tez mają problem z tą strukturą ki programami sieciowymi:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <string.h>

    int main(void)
    {

    int my_sock, his_sock, size;
    int rozm;
    ssize_t a, red;
    struct sockaddr_in my_struct;
    struct sockaddr_in his_struct;
    char buf[]= { "jestes zajebisty pod kazdym wzgledem\n" };

    if ((my_sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    printf("błąd gniazda\n");
    exit(1);
    }
    printf("wyszedłem z socket\n");
    my_struct.sin_port = htons(4000);
    my_struct.sin_addr.s_addr = htonl(INADDR_ANY);
    printf("wypełniłem strukture\n");
    if (bind( my_sock, (struct sockaddr *)&my_struct, sizeof(struct sockaddr_in)) == -1) {
    printf("błąd bind\n");
    exit(1);
    }
    printf("wyszedłem z bind\n");
    if (listen(my_sock, 5) == -1) {
    printf("błąd listena\n");
    exit(1);
    }
    printf("wyszedłem z listen\n");
    size = sizeof(struct sockaddr);

    while((his_sock = accept( my_sock, (struct sockaddr *)&his_struct, ( socklen_t * ) &size))<= 0)
    printf("błąd accept\n");
    printf("zrobiło sie accept\n");
    rozm = strlen ( buf );
    send( his_sock, buf, (size_t)rozm, 0);
    printf(buf);
    close(my_sock);

    return 0;
    }

Strona 1 z 2 12 OstatniOstatni

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