-
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:~$
-
-
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?
-
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:D )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....
-
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
-
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...
-
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...
-
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??
-
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.
-
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;
}