![]() |
[c++]controleren of een socket data bevat
ik ben nu een simpele chat client aan het maken, maar nu heb ik een probleem. ik heb 2 threads, de main voor het ontvangen en een server_send() voor het versturen, die als het goed is prallel aan elkaar draaien. Maar dat is het probleem niet, in main heb ik de volgende code.
PHP-code:
if(socket bevat data/is niet leeg) { //mn code } else { sleep(x) ; continue; } dat ie dus controleert of de socket informatie bevat, zoja dan moet ie dat ophalen en afdrukken, zonee moet ie x sec/msec w8en en dan de for loop opnieuw uitvoeren. Hoe krijg ik dit voor elkaar? |
Eindig jij je C++ altijd met een ?> ?
|
Citaat:
|
Citaat:
modified code: Code:
for( ; ; ) |
Citaat:
|
Citaat:
[edit] pause 2 :confused: |
hmm, na ik heb nu het volgende gevonden
http://analyser.oli.tudelft.nl/beej/.../advanced.html daar staat het volgende Citaat:
|
maybe threading isn't for you :cool:
|
Citaat:
select zorgt er idd voor dat je kan kijken of er data in bepaalde sockets zit. Dat doe je door de functie een lijst met sockets mee te geven welke die moet controlleren of je er naar kan schrijven, of je eruit kan lezen, of er een error is opgetreden. Select geeft dan lijsten terug welke sockets idd je naar toe kan schrijven, uit kan lezen en/of een error hebben. |
ik heb het ondertusse gevonden
zo controleer je of de sockets data bevatten. Code:
int result=select(pollingSet.fd_count, &pollingSet, NULL, NULL, &waitTime); |
Is er geen modus waarbij blocking IO gebruikt wordt? ASynch IO sucks IMHO :)
|
ik begrijp niet waarvoor je nu die verschillende threads gebruikt... waarom niet 1 helemaal voor de client en 1 helemaal voor de server? in ieder geval niet bij elkaar in de thread.. dan kan je ook gewoon blocking calls gebruiken idd... en als je het toch perse zo wilt gebruik dan select en ga niet constant zitten pollen in een loop.. dat is niet verstandig
|
Blocking? Zodat je niks anders kan doen en je programma gewoon vast zit, wachten totdat de select functie time-out of totdat er data binnenkomt? Dat je dus ook niks kan versturen? :/
(of heb ik het nou mis) |
Citaat:
|
Citaat:
|
Citaat:
trouwens ik wil geen zeikerd zijn hoor maar goto in je code? :eek: |
Citaat:
Zodra de verbinding er is, kan je idd. gewoon zenden en ontvangen. En op zich is er niks mis met Go To, het nodigt alleen uit tot slecht overzichtelijke code, verder niks |
Citaat:
Goto's zijn nooit onmisbaar, en zijn gewoon een gruwelijk lelijke constructie. |
goto == //FIXME :p zo'n beetje
|
Citaat:
|
Citaat:
|
Citaat:
|
Citaat:
|
Citaat:
En het is niet wat professioneler. Als ik iets met cpp doe voor een bedrijf dan mag ik het gewoon overnieuw doen als er ook maar 1 goto in zit. Goto's zijn gewoon brak en produceren brakke onoverzichtelijke code. Ook als je niet ver bent moet je gewoon _geen_ goto gebruiken. |
Citaat:
Code:
Welkom bij Dr HenDre-Chat :P Het rare is dat ie aangeeft dat het verstuurde bericht te groot is, terwijl ie de regel cin.getline(buffer, 200); //bericht invoeren gewoon of overslaat of negeert of zelf aanvult Maar goed, dit wordt allemaal een beetje offtopic |
Die buffer, is die wel gealloceerd?
|
Citaat:
|
wijst buffer naar geldig geheugen? of is het gewoon een pointer die nergens naar wijst... in dat geval... reserveer geheugen :) als dat niet het probleem is.. geef eens aan waar het programma op crasht en wat de foutmelding is
|
Citaat:
Code:
void server_send() a_thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&server_send, NULL, 0, &a_threadId); Omdat het me niet lukte om bij het maken van de thread 2 argumente mee te geven aan die funtie heb ik er maar NULL van gemaakt, en heb ik een struct genaamd sever_send_args om de data door te geven. |
Citaat:
|
Citaat:
|
Citaat:
|
char buffer[max_grootte_bericht];
-> char[] buffer = new char[max_grootte_buffer]; |
Citaat:
|
HenDre, post de source eens waar die regel instaat waar het fout gaat.. anders kunnen we moeilijk kijken he.. en ik neem aan dat je een access violation krijgt? of wat anders
|
Citaat:
|
Citaat:
edit: ow jah, ik krijg dus GEEN acces violation error, maar een unexpected error waar zelfs de debugger van MSVC++ nix meer kan, hij geeft gewoon unexpected error. edit2: source is geupdate, fout is opeens weg, hij kan opeens niet connecten met localhost, terwijl ik niets heb veranderd :confused: Code:
Welkom :P |
Citaat:
|
Citaat:
|
Waaorm begin je niet in Java bijvoorbeeld? Heel erg geschikt om een chatservertje te beginnen, en veel makkelijker als beginnerstaal.
|
Citaat:
PHP kan ook, maar daarin word een interactive client toch al lastig. |
Citaat:
|
Citaat:
|
Citaat:
Voordeel voornamelijk dat het makkelijker is (duidelijke foutmeldingen en geen geheugenbeheer), het een grote duidelijke en eenduidige API heeft, en het een veel striktere OO taal is. Java is voor beginners gewoon veel beter. |
Citaat:
|
en in hoeverre verschilt de syntax van cpp en java? Kun je misshien een klein voorbeeld geven van een java prog? :)
|
Citaat:
Code:
public class HelloWorld |
Citaat:
En nog een vraag, lijkt java meer op c(++) of op C#? Want ik wil eigenlijk uiteindelijk naar C#, maar toen ik met c++ begon wist ik daar nog niets van af. Maar voorzover ik weet lijkt java meer op c# dan op c(++)? |
Alle tijden zijn GMT +1. Het is nu 00:51. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.