Hirdetés
- Kínai tech-túra összefoglaló
- Okosóra és okoskiegészítő topik
- Google Pixel topik
- Samsung Galaxy Z Fold5 - toldozás-foldozás
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
- Yettel topik
- Xiaomi 15T Pro - a téma nincs lezárva
- Amazfit Bip 6 - jót olcsón
- Íme az új Android Auto!
- Szívós, szép és kitartó az új OnePlus óra
- 
			  Mobilarena  
Új hozzászólás Aktív témák
- 
			
			  qestion aktív tag repeat 
 Tomb [ i ] := i*2;
 Undeclared identifier: 'Tomb'
 Hogy kellene deklarálni?
 [Szerkesztve]
- 
			
			  qestion aktív tag Mikor kell/célszerű belső - külső változót használni? 
 lokális - globális
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1496
							
							üzenetére Jester01
							
							
								#1496
							
							üzenetéreaz a negyedik karakter: id[4] nem  
 gdb még mindig nem okés 
 (gdb) set args -Wall -g -lasound -o wav2
 (gdb) run gcc wav2.c
 Starting program: gcc wav2.c
 No executable file specified.
 Use the ''file'' or ''exec-file'' command.
 (gdb)
 ???
 mit nem csinálok jól?
 ---
 a bedrótozás azt jelenti, hogy megpróbálja a legáltalánosabb paraméterekkel lejátszani a wavot?
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1494
							
							üzenetére Jester01
							
							
								#1494
							
							üzenetérewav1.c: 
 most tettem a 4 karakter után egy lezáró \0-t is, de most is szegmens hibázik [link]
 ---
 wav2.c:
 gdb-t hogyan kell használni? ad egy promptot, oda mit írjak? (előtte -g-vel fordítottam a kódot)
 egyébként mit értesz az alatt, hogy nem a wav-ból veszi a paramétereket a progi? ha nem abból, akkor honnan?
 szóval ha jól értettem, akkor a snd_pcm_writei elé kell egy fread, ami a bufba beolvassa a wav tartalmát, kivéve az első x (44?) bájtot?
- 
			
			  Jester01 veterán válasz  emitter
							
							
								#1493
							
							üzenetére emitter
							
							
								#1493
							
							üzenetéreEzt a wav1.c-t sürgõsen felejtsd el! Fogalma sincs az ürgének mit csinál. Ha 4 byteos tömbbe olvas be, akkor azt pl. nem lehet strcmp-vel hasonlítani, mert nincs benne lezáró 0. Helyesen strncmp-vel 4 karakter hosszon stb. Ugyanezen okból nem tudod kiírni sem: %s-t próbáltál, ez pedig nem string, csak 4 karakter. 
 A wav2 nekem mûködik. Fordítsd debug infóval és nézd meg gdb-vel, hogy hol halálozik el.
 melyik fv küldi a buffer tartalmát a hangkártyának?
 Mégis mit gondolsz? Hiszen csak egyetlen hívás van a ciklusban, az snd_pcm_writei.
 Egészen pontosan kell bele egy (f)read ami beolvassa a következõ 128 byteot. Gondolom érdemesebb lesz nagyobb buffert használni.
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1492
							
							üzenetére Jester01
							
							
								#1492
							
							üzenetéreoké, köszi 
 már csak 2 warning maradt, azokkal egyelőre nem foglalkozom, viszont az id 4 bájtos karaktertömbbe egyáltalán nem csak az első négy bájt kerül, hanem valami szemét is, ugyanis kiíratva ezt kapom:
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gcc -Wall -o wav1 wav1.c
 wav1.c: In function 'main':
 wav1.c:39: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
 wav1.c:44: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./wav1
 RIF˛˘żą˘żŘą˘ż˘^ޡ
 Error: not a RIFF file
 ahol az id értéke mindig ''RIF...'', azaz az első 3 karakter állandó, utána random szemét 
 kód: [link]
 ----
 a minimal-playbacknél pedig ez van:
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./wav2 hw:0,0
 Szegmens hiba
 kód: [link]
 a lejátszást akkor hogyan oldhatom meg? a végén a for ciklusban kell valamit csinálnom a bufferral - mit is pontosan? melyik fv küldi a buffer tartalmát a hangkártyának?
- 
			
			  Jester01 veterán válasz  emitter
							
							
								#1491
							
							üzenetére emitter
							
							
								#1491
							
							üzenetéreNemtom honnan szedted, de az összes hibás fread hívásból lemaradt egy & jel. 
 Amúgy a minimal playback progi kis módosítással lejátssza a wavod, ha nem baj, hogy a paramétereket nem a wavból veszi. Simán abban a lejátszó ciklusban feltöltöd a buf-t a fájlból (az elsõ - azt hiszem - 44 byteot átugrod, az a fejléc)
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1490
							
							üzenetére Jester01
							
							
								#1490
							
							üzenetérede nekem olyan progi kéne, ami _tényleg_ lejátsza a fájlt! 
 akkor a minimal-playback nem jó, helyette ott van ez a wav-loader [link]
 viszont sajna ez is hibákat dob:
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gcc -Wall -o wav1 wav1.c
 wav1.c: In function 'main':
 wav1.c:36: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
 wav1.c:38: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
 wav1.c:41: warning: pointer targets in passing argument 1 of 'strcmp' differ in signedness
 wav1.c:44: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
 wav1.c:45: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
 wav1.c:46: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
 wav1.c:47: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
 wav1.c:48: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
 wav1.c:49: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
 wav1.c:50: warning: passing argument 1 of 'fread' makes pointer from integer without a cast
 itt a kódom: [link]
 ha ez a hivatalos kód, akkor miért hibázik ennyit? castoljam az összes kérdéses részt?
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1487
							
							üzenetére Jester01
							
							
								#1487
							
							üzenetéreköszi, de sajna az asoundlib.h-ban csak újabb includok vannak, függvények nem... viszont egy (void*) casttal most szépen lefordul, nem warningol, viszont nem tudom, hogy milyen argot adjak meg indításkor: 
 ...
 if ((err = snd_pcm_open (&playback_handle, argv[1], SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
 fprintf (stderr, ''cannot open audio device %s (%s)\n'',
 argv[1],
 snd_strerror (err));
 exit (1);
 ...
 szóval ezalapján szerinted mit adjak meg neki, és hova írjam, hogy milyen wavot játsszon le?
- 
			
			  Jester01 veterán válasz  emitter
							
							
								#1485
							
							üzenetére emitter
							
							
								#1485
							
							üzenetéreAz undefined reference az linkelési hiba. Kell egy -lasound kapcsoló, mert ezek az alsa könyvtárban vannak. 
 honnan tudjam, hogy ez a fv milyen típusú mutatót vár 3. arg-ként
 A legbiztosabb ha megnézed a header fájlban, hiszen a fordító is onnan tudja. De amúgy az alsa doksiban minden bizonnyal benne van.
 A BYTE és DWORD típusokkal vigyázni kell, hogy amit használsz valóban 8 és 32 bit legyen. Ezt eselteg egy configure scripttel lehet ellenõrizni ami mindig kideríti melyik szabványos típus felel meg. De te most valóban nyugodtan írhatsz helyettük unsigned char-t és unsigned int-et.
- 
			
			  mesyre csendes tag Én Visaul Basicban dolgozom. Szeretem is. Ti hogy vagytok vele? 
 A programjaim: www.teamattic.com oldalon
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1484
							
							üzenetére Jester01
							
							
								#1484
							
							üzenetérea minimal playback program ([link]) kódját próbáltam egy-az-egyben futtatni, és egy sor hibát dobott: 
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ gcc -Wall -o wav2 wav2.c
 wav2.c:89: warning: return type defaults to 'int'
 wav2.c: In function 'main':
 wav2.c:127: warning: passing argument 3 of 'snd_pcm_hw_params_set_rate_near' makes pointer from integer without a cast
 /tmp/ccIhl5R0.o: In function `main':
 wav2.c:(.text+0x34): undefined reference to `snd_pcm_open'
 wav2.c:(.text+0x4b): undefined reference to `snd_strerror'
 wav2.c:(.text+0x87): undefined reference to `snd_pcm_hw_params_malloc'
 wav2.c:(.text+0x9e): undefined reference to `snd_strerror'
 wav2.c:(.text+0xd9): undefined reference to `snd_pcm_hw_params_any'
 wav2.c:(.text+0xf0): undefined reference to `snd_strerror'
 wav2.c:(.text+0x12d): undefined reference to `snd_pcm_hw_params_set_access'
 wav2.c:(.text+0x144): undefined reference to `snd_strerror'
 wav2.c:(.text+0x181): undefined reference to `snd_pcm_hw_params_set_format'
 wav2.c:(.text+0x198): undefined reference to `snd_strerror'
 wav2.c:(.text+0x1d7): undefined reference to `snd_pcm_hw_params_set_rate_near'
 wav2.c:(.text+0x1ee): undefined reference to `snd_strerror'
 wav2.c:(.text+0x22b): undefined reference to `snd_pcm_hw_params_set_channels'
 wav2.c:(.text+0x242): undefined reference to `snd_strerror'
 wav2.c:(.text+0x27d): undefined reference to `snd_pcm_hw_params'
 wav2.c:(.text+0x294): undefined reference to `snd_strerror'
 wav2.c:(.text+0x2c8): undefined reference to `snd_pcm_hw_params_free'
 wav2.c:(.text+0x2da): undefined reference to `snd_pcm_prepare'
 wav2.c:(.text+0x2f1): undefined reference to `snd_strerror'
 wav2.c:(.text+0x33a): undefined reference to `snd_pcm_writei'
 wav2.c:(.text+0x354): undefined reference to `snd_strerror'
 wav2.c:(.text+0x393): undefined reference to `snd_pcm_close'
 collect2: ld returned 1 exit status
 ---
 ennek mi lehet az oka? ha int main()-re írom át, akkor is majdnem ugyanezeket dobja
 pl. ''passing argument 3 of 'snd_pcm_hw_params_set_rate_near' makes pointer from integer without a cast'' - ha erre a függvényt így hívom, az jó?
 snd_pcm_hw_params_set_rate_near (playback_handle, hw_params, (void*)44100, 0)
 vagy honnan tudjam, hogy ez a fv milyen típusú mutatót vár 3. arg-ként?
 és a többi undefined reference mit jelent?
 ---------
 van egy másik próbálkozásom is, ez alapján: [link]
 itt viszont vannak BYTE meg DWORD típusok, amit az ansi C nem ismer... ezek helyett írhatok CHAR, ill. INT típust, vagy ezeknek nem ugyanakkora a méretük?
 [Szerkesztve]
- 
			
			  emitter őstag válasz  emitter
							
							
								#1477
							
							üzenetére emitter
							
							
								#1477
							
							üzenetéreátírtam, szerintem most jónak kell már lennie, viszont még mindig az #1477-ben leírt hibát adja  
 nem is értem ezt a sort:
 sa.sa_handler = sigchld_handler;
 miközben a fv definíciója ez:
 void sigchld_handler(int s){
 while(wait(NULL) > 0);
 }
 hogyan hívhatok egy paraméteres fv-t paraméter nélkül az az érdekes, hogy ugyanez a fv-hívás működött régebben, mikor még osztály nélkül írtam meg a progit... az az érdekes, hogy ugyanez a fv-hívás működött régebben, mikor még osztály nélkül írtam meg a progit...
 szerinted hol a hiba, mit javítsak?
 és felraktam a táramra a legújabb server_oop.cpp-t..
- 
			
			  Jester01 veterán válasz  emitter
							
							
								#1476
							
							üzenetére emitter
							
							
								#1476
							
							üzenetéreDestruktort (általában) nem kell meghívni, az meghívódik az objektum megszûnésekor magától. Ha mégis meg akarod hívni (de most nem  ) akkor simán metódushívással (objektumpéldányra!) ) akkor simán metódushívással (objektumpéldányra!)
 A másik problémádra: az a baj, hogy a tagfüggvények implicit elsõ paraméterként megkapják az objektumra mutató pointert (this). Igy aztán már nem egyezik a prototípus. Csinálj belõle static metódust, az nem kap this pointert. Viszont abban ebbõl kifolyólag nem is hivatkozhatsz nem static tagokra.
 MOD: ja és a send()-nek természetesen úgy mondod meg, hogy egy tagfüggvénybe rakodm, ezáltal elrejtve az implementációt.
 [Szerkesztve]
- 
			
			  emitter őstag válasz  emitter
							
							
								#1476
							
							üzenetére emitter
							
							
								#1476
							
							üzenetéreés mégegy hiba, amire nem tudok rájönni: 
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ g++ -Wall -o server_oop server_oop.cpp
 server_oop.cpp: In member function 'void myConn::buildConn(int, int&, sockaddr_in&)':
 server_oop.cpp:71: error: argument of type 'void (myConn:: )(int)' does not match 'void (*)(int)'
 ezt erre a sorra dobja:
 sa.sa_handler = sigchld_handler; //levag minden halott folyamatot
 ez a sor ugyanis a buildConn() fv-ben van, ami a private részben van.
 előtte szintén a private részben van egy ilyen fv:
 void sigchld_handler(int s){
 while(wait(NULL) > 0);
 }
 amíg nem írtam át a progit osztályosra, addig simán működött a dolog
 [Szerkesztve]
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1475
							
							üzenetére Jester01
							
							
								#1475
							
							üzenetéreértem, akkor írok destruktort is. 
 viszont ha nem adom ki a newfd-t, akkor hogyan mondom meg a send()-nek, hogy melyik fd-re üljön?
 mod: ja és a mainből a destruktort hogyan kell hívni? ~myConn(); ra hibát dob, viszont sima myConn()-nál honnan tudja, hogy az a destruktor és nem egy arg-nélküli konstruktor?
 [Szerkesztve]
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1473
							
							üzenetére Jester01
							
							
								#1473
							
							üzenetéreNa, akkor tovább homályosítom a képet: 
 van egy myConn nevű osztályom:
 class myConn{
 private:
 int newfd; //ezt meg
 struct sockaddr_in client_addr; //ezt kell visszadnia majd a tagfv-eknek
 void buildConn(){...} //ez a fv végzi a tényleges kapcsolatépítést
 public:
 myConn(const int srvport){ buildConn(srvport); }
 ~myConn(); //kell egyáltalán a destruktor???
 int getFD(){ return newfd;} // 1. tagfv
 sockaddr_in getClientAddr() { return client_addr;} // 2. tagfv
 }
 ez a vázlat eddig a szintig helyes?
 mod: egy kis szintaktikai modding...
 [Szerkesztve]
- 
			
			  emitter őstag Vááá!!! 
 Kezdem föladni, pedig nem kéne   
 Szóval mivel C++ban kell a progimat írnom, osztályba akarom rakni első lépésben a hálózati kapcsolat létrehozását végző kódot. Itt kezdődtek a bajok, amikkel már lassan 2 órája birkózom 
 Összefoglalom a helyzetet (egyelőre csak a szerver-progi):
 -A főprogramban az osztály konstruktorát meghívnám a szerver-portcímével
 myConn(const int srvport)
 -Az osztálynak vissza kéne adnia valamilyen módon a főproginak a fájlleírót (hogy aztán tudjak vele send-elni, recv-elni), valamint esetleg a kliens sockaddr_in struktúráját, ez utóbbi nem annyira lényeges
 Egyelőre nem akarom belinkelni a kódot, mert még kiröhögtök, de sajna még nagyon nem vágom az osztályokat, csak most kezdtük el... hasonlóan állok a refernciákkal is 
 Szóval várnám a javaslatokat, hogyan érdemes megoldani a vázolt feladatot: milyen módon adjak vissza a főproginak változókat/értékeket...
 Előre is köszi!
 emitter
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1463
							
							üzenetére Jester01
							
							
								#1463
							
							üzenetéreja, hogy így kell hívni a length()-et  ez nem jött le a prototípusából ez nem jött le a prototípusából 
 namind1
 szóval, most van egy string s; cuccom, és ebbe getline-nal olvasok.
 s.length() okés. viszont:
 if(send(sockfd, s, s.length(), 0) == -1){
 ...
 erre a fordító:
 client.cpp:64: error: cannot convert 'std::string' to 'const void*' for argument '2' to 'ssize_t send(int, const void*, size_t, int)'
 ???
 send() sem c++ függvény?
 mod: igen, mind3-at behúztam
 #include <iostream>
 #include <string>
 using namespace std;
 [Szerkesztve]
- 
			
			  Jester01 veterán válasz  emitter
							
							
								#1462
							
							üzenetére emitter
							
							
								#1462
							
							üzenetéreHuhh? Ha átálltál, akkor milyen buf-od van már megint? A size() az a string osztály metódusa: 
 #include <iostream>
 #include <string>
 using namespace std;
 int main(int, char**)
 {
 string s;
 getline(cin, s);
 cout << ''length: '' << s.length() << '', size:'' << s.size() << endl;
 return 0;
 }
 Esetleg a using-ot kifelejtetted?
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1461
							
							üzenetére Jester01
							
							
								#1461
							
							üzenetérejó, akkor átállok C++ valid függvényekre  első érdekesség: annak ellenére, hogy beinklúdoltam <string>-et, a g++ hibát dob, hogy length(), és size() was not declared in this scope... első érdekesség: annak ellenére, hogy beinklúdoltam <string>-et, a g++ hibát dob, hogy length(), és size() was not declared in this scope... 
 pl így hívtam a size-t:
 size(buf) //ahol buf char* típusú, de string típusúnál is ugyanezt dobja
 mod: ja, és nem tudsz ajánlani egy jó kis c++ referenciát? mert a cpprefernce.com sokszor elég szűkszavú, meg számomra nem mindig egyértelmű 
 pl ez is: [link]
 >> size_type length() const;
 itt most a length mit vár? mi az a const uána 
 [Szerkesztve]
- 
			
			  Jester01 veterán válasz  emitter
							
							
								#1460
							
							üzenetére emitter
							
							
								#1460
							
							üzenetéreElõször is eldöntöd, hogy mit akarsz használni. Ha maradsz a c ''stringeknél'' akkor a c-s stdio-t használod és a c-s függvényeket (strlen, fgets stb.) Ha c++ stringet használsz, akkor a c++ lehetõségeit használd (iostream, string stb). Ha pedig c++ stringbõl c string kell, akkor a c_str() metódussal azt is kaphatsz, de ez csak olvasható. 
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1459
							
							üzenetére Jester01
							
							
								#1459
							
							üzenetéreértem. én egyelőre a <string.h>-t inklúdoltam, akkor gondolom majd nyávog a fordító, ha abban nincs benne valami, ami a string-ben megvan már... 
 getline-t én is néztem már, de az meg string típusba olvas be, és azt nem tudom konvertálni char*-ba, pedig sok függvény meg csak char*-t fogad el 
 mi akkor a megoldás?
 mod: ja még1: ha üres ENTER-t akarok érzékelin mondjuk arra, hogy ha egy chatprogiban az egyik fél üres entert nyom, akkor bezáródjon a beszélgetés, szóval akkor ezt hogyan tegyem? ilyenkor a buf változó értéke (amibe beolvasom a sztringet), mit tartalmaz? \n-t vagy \r-t, vagy mit?
 [Szerkesztve]
- 
			
			  Jester01 veterán válasz  emitter
							
							
								#1458
							
							üzenetére emitter
							
							
								#1458
							
							üzenetéreAz >> operátor ugyanúgy szavakat olvas mint a scanf %s formátuma. Ha egész sort akarsz, akkor használd a getline függvényt. 
 A <> és az idézõjel pont ugyanazt jelenti mint c-ben, mégpedig a keresési útvonalat határozza meg. Ha idézõjelet használsz, akkor az aktuális fájlhoz képest értelmezett relatív elérési útvonallal megadott directoryban keresi elõször és csak utána a -I kapcsolóval megadott illetve a beépített helyeken. A C++ headerek .h kiterjesztés nélkül vannak, pl. #include <string>. De ez mást tartalmaz mint a string.h!
- 
			
			  emitter őstag válasz  emitter
							
							
								#1457
							
							üzenetére emitter
							
							
								#1457
							
							üzenetéreaz mitől van, hogy a cin egy sztring beolvasásánál a szóköznél kettévágja azt, és elég furcsa dolgokat művel  
 while(1){
 cout << ''> '';
 cin >> buf;
 cout << buf;
 cout << ''\nstrlen(buf): '' << strlen(buf) <<endl;
 if(send(sockfd, buf, strlen(buf), 0) == -1){
 perror(''send'');
 exit(1);
 }
 }
 ez a kérdéses kódom, és ezt írja ki:
 > ki vagy?
 ki
 strlen(buf): 2
 > vagy?
 strlen(buf): 5
 >
 mintha a stdin-bemeneti puffert nem űrítené a szóköz beolvasása után, 2x fut le a ciklus, mire kiürül a puffer...
 mivel tudnék segíteni a dolgon? (fflush(stdin)-re semmit nem csinál)
 szóval azt szeretném ha szóközös sztringeket egybe venné 
 thx
 mod: még annyit kérdeznék, hogy #include-nál C++ban mikor kell '''' közé és mikor <> közé rakni a libet: pl. ha a string libet akarom behúzni, azt hogyan kell helyesen? Tudom, h a C-s módszert is elfogadja, de én szeretnék teljesen C++valid lenni 
 [Szerkesztve]
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1454
							
							üzenetére Jester01
							
							
								#1454
							
							üzenetérehehe, régen volt... de miért is nem jó ez a castolás?  ign, megnéztem, nem castolja át ign, megnéztem, nem castolja át
 int MYPORT = atoi(argv[1]);
 így már jó a myport értéke, de a kliens még mindig nem csatlakozik... lehet, h vmi tűzfal-féleség megfogja? Sima ubuntum van, nem állítottam be semmiféle tűzfalat... igaz, egy routeren keresztül netezek, de a localhost kérés nem megy ki a routerig, vagy igen?
- 
			
			  Jester01 veterán válasz  emitter
							
							
								#1453
							
							üzenetére emitter
							
							
								#1453
							
							üzenetéreFigyi, te elloptad emitter nickjét? Neki azért sikerült egy aknakeresõ progit írni. ![;]](//cdn.rios.hu/dl/s/v1.gif) 
 Az a sor NEM konvertálja az argv[1] stringet számmá ergo nem jó porton fog hallgatózni a szervered. Ha nem hiszed, írasd ki a MYPORT értékét.
 Másik kérdésedre: az fg paranccsal elõtérbe hozhatod.
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1452
							
							üzenetére Jester01
							
							
								#1452
							
							üzenetérenemjó  Connection refused. Connection refused.
 miért fájt ez a myportos sor 
 oké, sin_size mostantól socklen_t, de nem ez volt a hiba
 mondom, az az érdekes, hogy netstat nem látja hallgatózni a server-t 
 (amúgy ha a servert háttérben futtatom - &-vel, akkor utána hogyan tudok kilépni belőle - kill nélkül?)
 mod: és frissítettem a kódokat is a neten
 [Szerkesztve]
- 
			
			  emitter őstag válasz  Jester01
							
							
								#1450
							
							üzenetére Jester01
							
							
								#1450
							
							üzenetéreemitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ nc 127.0.0.1 9999 
 (UNKNOWN) [127.0.0.1] 9999 (?) : Connection refused
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ nc LAPTOP 9999
 localhost.localdomain [127.0.0.1] 9999 (?) : Connection refused
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./client LAPTOP 9999
 connect: Connection refused
 és itt a két forráskód, server.cpp: [link]client.cpp: [link]
 egyébként a gcc nem tud c++t fordítani, vagy rosszul tudom? és a g++ fordító nekem nem sírt, amikor a precedenciás-részt fordította... neked hogyhogy lefordult gcc-vel?
 most átírtam mindent ahogy mondtad, zárójel nélkülire, de ugyanaz a helyzet. Az az érdekes, h netstat -l nem látja a server-t, pedig az fut (ps aux), és eljut az accept()-ig, mert ez még kiírja:
 Halott folyamatok eldobva.
 mind2 rész a 9999-es portot használja, (a kliens szintén, így, amit néztél kódot, még lehet, h egy régebbi verzió volt)
 akkor a socklen_t-s részt hogyan csináljam? sin_size-t longintként hozzam létre, és úgy castoljam (socklen_t*)-vel 
 köszi, hogy segítesz!
- 
			
			  Jester01 veterán válasz  emitter
							
							
								#1447
							
							üzenetére emitter
							
							
								#1447
							
							üzenetéremegint nem gondolkoztam mielőtt írtam: csak konvertálnom kellett (socklen_t*)-vel 
 Rossz ötlet volt. A változó típusát kell átállítani, nem a pointert castolni. Pl. ha a socklen_t 64 bites és te egy int* pointert adsz be átcastolva, akkor szépen felülíródik az utána lévõ memóriaterület elsõ 4 byte-ja.
 nagy nehezen tájöttem a hibára:
 if( sockfd = socket(AF_INET, SOCK_STREAM, 0) == -1){...
 a sockfd-s kifejezést még külön be kellett zárójelezni... de hogy miért
 Operátor precedencia. Különben miért volt nehéz? A gcc warningot dob érte...
 server.cpp:36: warning: suggest parentheses around assignment used as truth value
 Ugye az accept-nél is zárójeleztél? Én különben is kerülöm az értékadás+feltétel kombinációt, jelen esetben abszolút semmit nem nyersz vele. Ha simán azt írod, hogy
 newfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size);
 if (newfd == -1){
 az sokkal olvashatób és még a precedencia dologba sem szaladsz bele.
 Ugye a szerver a 9999-es porton listenel? Mert a kód amit kitettél a netre az tojik a parancssorra és mindenképp a 3490-es porton figyel. (netstat -l)
 MOD: és amúgy mûködik is:
 hcs:/tmp> ./server
 Kliens ciminfoja:
 ip: 16777343
 port: 33205
 Program vege. Nyomj egy bill-t!x
 hcs:~> nc 127.0.0.1 3490
 Hello world!
 [Szerkesztve]
- 
			
			  emitter őstag válasz  emitter
							
							
								#1447
							
							üzenetére emitter
							
							
								#1447
							
							üzenetérevalszeg a localhost miatt van a hiba, de miért??? 
 a beej leírása szerint simán kéne menni egyazon gépen mind2 proginak (külön ablakból indítottam őket)
 a szerver eljut az accept-ig, ott várakozik a kérésekre
 a kliens viszont sajnos Connection refused-t dob 
 akár LAPTOP-ot írok hostként, akár 192.168.1.2-t, akár 127.0.0.1-t...
- 
			
			  RAM őstag Jól elbeszélgetsz magaddal. 
 xar, amikor nem tudsz tájönni...
- 
			
			  emitter őstag válasz  emitter
							
							
								#1446
							
							üzenetére emitter
							
							
								#1446
							
							üzenetérenagy nehezen tájöttem a hibára: 
 if( sockfd = socket(AF_INET, SOCK_STREAM, 0) == -1){...
 a sockfd-s kifejezést még külön be kellett zárójelezni... de hogy miért 
 -------------
 közben újabb hiba, a szervert elindítva ugyanarról a gépről nem tudok rácsatlakozni 
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ telnet LAPTOP 9999
 Trying 127.0.0.1...
 telnet: Unable to connect to remote host: Connection refused
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$
 vagy
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./client LAPTOP 9999
 connect: Connection refused
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$
 ezek vajon miért 
 ja, természetesen előtte elindítottam a szervert:
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ ./server 9999
 Listening...
 [Szerkesztve]
- 
			
			  emitter őstag válasz  emitter
							
							
								#1445
							
							üzenetére emitter
							
							
								#1445
							
							üzenetéremegint nem gondolkoztam mielőtt írtam: csak konvertálnom kellett (socklen_t*)-vel  
 viszont most újabb hiba jön futtatáskor, amivel már tényleg nem tudok mit kezdeni:
 bind: Socket operation on non-socket
 a server.cpp-t felnyomtam ide: [link]
 ha a setsockopt()-ot bennhagyom (most ki van kommentezve), akkor is ugyanezt a hibát adja, csak bind helyett setsockopt-ra 
- 
			
			  emitter őstag if(newfd = accept(sockfd, (struct sockaddr *)&client_addr, &sin_size) == -1){ 
 perror(''accept'');
 exit(1);
 }
 erre miért dobja a g++, hogy:
 emitter@LAPTOP:~/BME_nemet/Prog2/Nagyhazi$ g++ -o server server.cpp
 server.cpp: In function 'int main()':
 server.cpp:75: error: invalid conversion from 'int*' to 'socklen_t*'
 server.cpp:75: error: initializing argument 3 of 'int accept(int, sockaddr*, socklen_t*)' 
 ezt egy az egyben a 'Beej útmutatója a hálózati programozáshoz' c. irományból szedtem ki, nem értem mit problémázik 
 egyébként ilyen típusúak a kérdéses változók:
 ...
 int sockfd, newfd;
 int sin_size;
 struct sockaddr_in client_addr;
 ...
- 
			
			  Jester01 veterán 1. mi nem jó? Nekem szépen kilép az összes egymásbaágyazott shellbõl. Amúgy meg természetesen magadnak is ellenõrizheted a subshell visszatérési értékét ($?) 
 2. már írtam, hogy nem a ciklussal van a baj. Példa:
 global=0
 for((i=0;i<10;i++))
 do
 echo -n ''$i ''
 global=$i
 done
 echo ''global=$global''
 $ ./t.sh
 0 1 2 3 4 5 6 7 8 9 global=9
 CSAK akkor nem jó, ha valami oknál fogva másik shellben fut.
- 
			
			  emitter őstag Szeretnék csinálni első lépésben egy kliens-szerver párost, localhoston kéne beszélgetniük, Linuxon. 
 Hogyan kell megírnom a szervert? Értem ezalatt, hogy csak hallgatózzon és ha jön egy kérés, akkor kapcsolódjon össze a kleinssel, vagy csak egy bizonyos porton várjon egy adott ip-ről kéréseket? A kliens pedig tudván előre a szerver ip-jét és portját, simán connect()-tel kapcsolódjon hozzá? Stream socketet használok.
 Ha a szerver csak hallgatózik, akkor hogyan tudom megállapítani, hogy a csatlakozó kliens tényleg a várt ügyfél, nem pedig egy ''betörő''?
 (A progim (wav-streamet küldenék lejátszásra a szervermek) később úgy lenne használatos, hogy mondjuk megadhatom én a kliensen a szerver ip-jét és nyitott portját, majd erre kapcsolódok. Vagy szerintetek ne így csináljam meg a dolgot?)
 Köszi!
 mod: Vagy én tudom rosszul, és a szerver csak hallgatózva tud a klienshez kapcsolódni, szóval connect()-tel nem?
 [Szerkesztve]
- 
			
			  Jester01 veterán Vegyük észre, hogy itt a jó öreg subshell problémával állunk szemben. 
 A ctrl+c múködését pedig (bunkó módon) egy kill -INT $$ utasítással lehet szimulálni 
 MOD: ez sem jó, mert a $$ nem az aktuális shell pidje 
 Tyrael: A break-nek lehet megmondani, hány szintet ugorjon.
 [Szerkesztve]
- 
			
			  Tyrael senior tag nemtom konkretan melyik programnyelvrol beszelunk(mar latom, hogy unix shell script), nem is vagyok programozo, de: 
 php-ban ugy mukodik, hogy fuggveny futasa kozben definialt valtozok nem lesznek globalisak.
 szal ha definialod talal-t 0-ra, majd meghivsz egy sajat function-t, ott csinalsz valamit, es talal-t atallitod 0-ra, akkor miutan viszatersz a fuggvenyhivas helyere talal meg mindig 0 lesz, mert te a fuggvenyen beluli talal valtozot valtoztattad meg.
 hogy jol mukodjon, a function-on belul szukseg van a
 global $talal;
 sorra, utana mar nyugodtan valtoztathatod a $global erteket, es globalisan is valtozni fog.
 sorry, ha nagy hulyeseget irtam, de lehet hogy nalad is valami ilyesmi a baj, nezz utana az adott programnyelv leirasaban a valtozok hataskore hogy van megszabva.
 Tyrael
 [Szerkesztve]
- 
			
			  Tyrael senior tag exit-nek nem lehet megadni, hogy hany szintet lepjen vissza? 
 mintha olvastam volna valami ilyesmi lehetoseget
 illetve be lehetne vezetni egy talal valtozot is.
 te esetedben mikor kiirja alma-t, akkor beallitja a talal valtozot mondjuk 1-re, es mikor kiirna a mogyorot, akkor megvizsgalod, hogy talalnak mi az erteke, es ha 1, akkor nem lep bele.
 vagy ilyesmi
 Tyrael
- 
			
			  QuarK senior tag 
- 
			
			  Orc senior tag válasz  Jester01
							
							
								#1426
							
							üzenetére Jester01
							
							
								#1426
							
							üzenetéreNem jó, mert ha pl. van egy while ciklusban egy for ciklus és abban egy elágázás majd abban az exit, akkor nem lép ki mindenből, sajnos a while ciklus utáni résszel is foglalkozik. 
 pl.:
 while [[]valami]]
 do
 for (valami)
 do
 if [[valami]];then
 a=1
 echo alma
 exit 1
 fi
 done
 done
 echo mogyoró
 (echo $a)
 Azt akarom, hogy ha almát kiír, akkor mogyorót már ne írjon ki, de ez így nem müködik, mind a kettőt kiírja.
 A másik meg az, hogy hiába adtam meg az ''a'' változó értékét ez elágazásban a script végén az echo $a nem ír ki semmit(pedig azt kiírja, hogy alma).
 mod: Olyan hatású parancs kellene, ami ugyanazt csinálja, mintha a script futása közben nyomnék egy ctrl+c-t.
 [Szerkesztve]
- 
			
			  arato csendes tag Sziasztok! 
 Szükségem lenne valamilyen anyagra a programozás feljlődéséről.
 Itt konkrétan nem arra lennék kíváncsi hogy a gépi kódot az asembly ... második generációs nyelvek... 3. generációs nyelvelek...... követték, hanem arra hogy a gépi kód miért avult el miért volt szükség a fejlesztésre, hogy alakultak ki a további nyelvek és miért, mik voltak a kiváltó okok mint pl. a szoftwareválság meg ilyesmik!!!!!
 Ha valaki tanult ilyesmikről vagy tud egy jó könyvet, akkor nagyon örülnék ha meg tudná ani a tankönyv vagy az irodalom címét, esetleg web címét, vagy bármilyen formába tudna segíteni!!!
 előre is köszi!!!!!
 email címem: arato@vipmail.hu
- 
			
			  Orc senior tag Mely parancsal lehet egy unix scriptból azonnal kilépni? 
 Tehát van egy script:
 #!/bin/bash
 blablabla(while,for,if,stb)
 if [[ $a -eq 1 ]];then
 echo ''nyomi''
 kilép
 fi
 blablabla2(csak itt lesz vége a while,for,stb ciklusoknak)
 Azt szeretném, hogy a ''kilép'' parancs után már semmivel se foglalkozzon, álljon le, egy nyamvadt karaktert se olvasson be. Azt hittem az exit, break megfelelő lesz de nem,valami ''durvább'' kell.
 Előre is köszi.
- 
			
			  Orc senior tag Köszönöm mindkettőtőknek, lényegében ugyanarra gondoltatok.  
- 
			
			  Spyx tag Hi allz. 
 Nagybajban vagyok. elakadtam a HF-el.
 Java-ban kell írnom egyolan programot ami hasonlít az ICQ-hoz persze csak nagyon kevéssé. És az a lényeg hogya server és a kliensek CORBA-val kommunikáljanak.
 Azt hogyan tudom megoldani hogy az egyik kliens egy metódust hív ami felszólítja a servert hogy küldjön egy szöveges üzenetet egy másik kliensnek? persze az első kliens valami név alapján vagy id alapján mondja meg hogy melyik másik kliensnek küldje az üzit. Please help.
 A szerver egyenlőre csak a bejelntkezett kliensek neveit és id-ját tárolja. Ott a problémám igazából hogy egyáltalán még a serverről sem tudok üzit küldeni a klienseknek vissza anélkül hogy a kliens meghívna egy metódust.
 Remélem azért érthető valamennyire a problémám.
 Spyx
- 
			
			  Orc senior tag Egy kis segítséget szeretnék kérni: 
 Kellene egy olyan unix script, ami el tudja dönteni, hogy a megadott szám (pl 123456789)-ban minden számjegy egyszer szerepel-e.
 Előre is köszi.
- 
			
			  corm senior tag válasz  Szebusz
							
							
								#1413
							
							üzenetére Szebusz
							
							
								#1413
							
							üzenetéreHtml űrlappal: 
 <FORM action=''mailto: akarki@akarmi.akarmi'' method=''post'' enctype=''text/plain''>
 <table>
 <tr>
 <td><p>kerdes:</p></td>
 <td><p><INPUT type=radio>a</p></td>
 <td><p><INPUT type=radio>b</p></td>
 <td><p><INPUT type=radio>focizni</p></td>
 <td><p><INPUT type=submit>Mehet!</p></td>
 </tr>
 </table>
 </form>
 ez egy kérdés, ebből kell neked három. Persze ez csak az ominózus rész, a html lap többi részét nem írtam le...
- 
			
			  Miracle senior tag 
- 
			
			  Blackmate őstag A Java-ban meglévő IS_A, HAS_A dolgot hogyan lehetne C-ben implementálni? 
- 
			
			  emitter őstag mivel érdemes linuxon a hangot kezelni? openAL api? (egyelőre csak wavot akarnék lejátszani, de nem tudom, hol, mivel kezdjem  ) )
 köcce
- 
			
			  Szebusz csendes tag heló kis segítség kéne. 
 ojan táblázatkéne hogy:
 három fajta kérdés van, illetve válaszlehetőség
 és az ember a neki szimpatikusakat bejelöli és aztén rákatint 1 gombra pl.mehet és akkor az adatokat elküldi 1 e-mail címre amit megadok.
 segítsetek kérlek
- 
			
			  emitter őstag válasz  Miracle
							
							
								#1410
							
							üzenetére Miracle
							
							
								#1410
							
							üzenetéreköszi  
 rendben, hogy a wav meg a socket is stream, de ez azt is jelenti, hogy nem tud adat elveszni, vagy lemaradni? mert olvastam a beej írásában, hogy lehet, h nem tud annyi adatot egy ciklusban átnyomni, amennyit én akarnék, így nekem kell ellenőrizni, hogy minden megérkezett-e. ez fennáll sock-stream esetében is, vagy csak a datagramnál?
- 
			
			  Miracle senior tag válasz  emitter
							
							
								#1409
							
							üzenetére emitter
							
							
								#1409
							
							üzenetére(őszintén megmondom, a magyarsága borzasztó a fordításnak, majdnem elment tőle a kedvem, hogy lehet valaki ilyen pocsék helyesírású ) de azért átrágtam magam rajta 
 ott van az angol valtozat is. egyebkent meg valaki a szabadidejeben leforditotta, ha nem tetszik javitsd ki vagy ne hasznald.
 szóval: ha én a progimban wav-streamet akarok [ ... ] szóval ebben az esetben milyen módot ajánlotok: stream, vagy datagram
 ez nem _veletlen_ egybeeses
 es ezen kívül: milyen fv-nyel érdemes küldeni a cuccost: send(), sendto(), write()?
 a writeot semmikepp sem, a snedto fv. to es tolen parameterei ignoralva vannak connection-modu socketek eseten, mint pl. a SOCK_STREAM, igy ex-has valassz egyet, ugyan az a ketto.
 aztán, úgy csináljam a dolgot, hogy nyitok én egy portot a gépen, vagy hagyjam a kernelre a random választást?
 ahogy tetszik. habar a szerveren nem art tudni melyik porton figyel a progi mert oda kell csatlakozni a kliensnek. (es ha nem tudod nyilvan nehez)
 az átküldött adatokat érdemes mondjuk md5-tel ellenőrizni (mármint hogy megérkezett-e minden rendben, vagy elvileg nem veszhet el adat?)
 vaw stream eseten imho tok folosleges de ahogy erzed... nem lesz gaz.
 mod: és mégegy dolog: Linuxon írom az egészet és C++ban kéne (ezt eddig nem is mondtam ) namost nekem csak egy gépemen van linux, azt lehet hogy csak látszólag küldöm a hálózatra a cuccost, hogy ki tudjam próbálni a működőképességét, de valójában mondjuk a saját ip-mre küldöm, így egyazon gépen futhat a kliens és a szerver progi? vagy hogyan oldjam meg ezt
 127.0.0.1 szinte kivetel nelkul minden oprendszeren 1 loop-device, ami gyakorlatilag a localhostod, ide batran csatlakozhatsz. csatlakozhatsz emellett a sajat IP cimedre is, es akkor nem kell erre a 99.99999% valoszinuseggel letezo loop-devicera hagyatkozni. vagy feloldhatod a ''localhost'' domainnevet, az is magadra mutat majd.
- 
			
			  emitter őstag hi all! 
 elkezdtem olvasgatni hálózatos témában, c4-eXp által javasolt irományt nézegettem (őszintén megmondom, a magyarsága borzasztó a fordításnak, majdnem elment tőle a kedvem, hogy lehet valaki ilyen pocsék helyesírású ) de azért átrágtam magam rajta ) de azért átrágtam magam rajta
 szóval: ha én a progimban wav-streamet akarok majd átküldözgetni egy bufferelt kliensnek (mármint hogy a kliensoldalon a vett adatokat bufferelem, és abból nyomom a hangkártyára)
 szóval ebben az esetben milyen módot ajánlotok: stream, vagy datagram
 és ezen kívül: milyen fv-nyel érdemes küldeni a cuccost: send(), sendto(), write()?
 aztán, úgy csináljam a dolgot, hogy nyitok én egy portot a gépen, vagy hagyjam a kernelre a random választást?
 az átküldött adatokat érdemes mondjuk md5-tel ellenőrizni (mármint hogy megérkezett-e minden rendben, vagy elvileg nem veszhet el adat?)
 bármilyen tapasztalatotok van e témában, kérlek osszátok meg velem!
 előre is köszönöm 
 mod: és mégegy dolog: Linuxon írom az egészet és C++ban kéne (ezt eddig nem is mondtam ) namost nekem csak egy gépemen van linux, azt lehet hogy csak látszólag küldöm a hálózatra a cuccost, hogy ki tudjam próbálni a működőképességét, de valójában mondjuk a saját ip-mre küldöm, így egyazon gépen futhat a kliens és a szerver progi? vagy hogyan oldjam meg ezt ) namost nekem csak egy gépemen van linux, azt lehet hogy csak látszólag küldöm a hálózatra a cuccost, hogy ki tudjam próbálni a működőképességét, de valójában mondjuk a saját ip-mre küldöm, így egyazon gépen futhat a kliens és a szerver progi? vagy hogyan oldjam meg ezt 
 [Szerkesztve]
- 
			
			  corm senior tag Hali! 
 Valaki okos eltudja nekem magyarázni, hogy a .net timer-e miértnem képes megállítani magát? Se a stop, se a enabled = false módszer nem műxik. Elvileg pedig kéne neki...
- 
			
			  emitter őstag válasz  mcmester21
							
							
								#1405
							
							üzenetére mcmester21
							
							
								#1405
							
							üzenetéremod: ez privibe akart menni  
 [Szerkesztve]
- 
			
			  mcmester21 csendes tag Köszi esetleg msnen megtudnánk beszélni? felvehetlek msnen? 
- 
			
			  emitter őstag válasz  mcmester21
							
							
								#1403
							
							üzenetére mcmester21
							
							
								#1403
							
							üzenetéreírd csak nyugodtan  bár én pl legközelebb csak holnap délután tudok segíteni bár én pl legközelebb csak holnap délután tudok segíteni
- 
			
			  mcmester21 csendes tag Tudna valaki segiteni a c nyelvben? 3-4 feladatot kéne segiteni, nagyon egyszerűek csak én nem értek hozzá egyáltalán! Kérem irjatok hogy tudok e és irom a feladatokat! 
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
- Folyószámla, bankszámla, bankváltás, külföldi kártyahasználat
- Milyen monitort vegyek?
- Horgász topik
- Kínai tech-túra összefoglaló
- Trollok komolyan
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- Kormányok / autós szimulátorok topikja
- Óra topik
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- OLED monitor topic
- További aktív témák...
- Dell Latitude 7410 karbon i7 10610U, 16GB RAM, SSD, jó akku, számla, 6 hó gar
- ÁRGARANCIA! Épített KomPhone Ultra 7 265KF 32/64GB RAM RTX 5070 Ti 16GB GAMER PC termékbeszámítással
- Tablet felvásárlás!! Apple iPad, iPad Mini, iPad Air, iPad Pro
- Minden szoftver mellé teljesen audit és NIS2 biztos, jogilag hiteles licencigazolást adunk át!
- BESZÁMÍTÁS! Apple Macbook Pro 16" 2019 i7 16GB 500GB 5300M 4GB macbook garanciával hibátlan működés
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: Promenade Publishing House Kft.
Város: Budapest
 
						
 
								 
								 
							 Persze nem ok, mert a buffer csak 4 byte méretû.
 Persze nem ok, mert a buffer csak 4 byte méretû. 
								 
							

 
							 
								



 
								 
							
![;]](http://cdn.rios.hu/dl/s/v1.gif)
 
								 
							 
								
 
							 
								 
								 
								 
								 
							 
								 
							 
								 Ha problémád lenne vele, akkor az osztálytársamhoz fordulj, asszem ő ezt eléggé vágja:
 Ha problémád lenne vele, akkor az osztálytársamhoz fordulj, asszem ő ezt eléggé vágja: 
								 
								 
							 ) de azért átrágtam magam rajta
 ) de azért átrágtam magam rajta 
							 
							 
								 
							

