[winsocket][C++]Prosty komunikator LAN-transm w obu kierunka

Pascalt

Użytkownik
Dołączył
Grudzień 29, 2007
Posty
32
Witam,
jako, ze dopiero zaczynam programowac na socketach - napotkalem na problem.
W celach cwiczebnych zaczalem pisac najprostszy komunikator miedzy dwoma numerami IP.
Moje pytanie jest takie. W jaki sposob spowodowac, zeby program raz wysylal, raz nadawal.
Z transmisja jednokierunkowa nie ma problemu, bo tu jak wiadomo mozna uzyc funkcji while (a w srodku "send()", lub "recv()"), natomiast takie rozwiazanie na pewno nie nadaje sie do mojego zamierzonego celu, gdyz najpierw wykonana zostalaby jedna z funkcji, nastepnie program oczekiwalby na druga - w przypadku kiedy chcialbym znow nadawac - bylby problem. Mam nadzieje, ze szczegolowo opisalem swoj problem. Prosze o podpowiedz, poniewaz sadze, ze tu wiele nie potrzeba i dla kogos programujacego wiecej niz ja w socketach - problem jest banalny.

Pozdrawiam.
 

Zergi

Użytkownik
Dołączył
Marzec 12, 2007
Posty
136
Też stworzyłem podobny temat jest gdzieś jeszcze napewno, A co do pytanie to niestety w konsoli jest to niemożliwe. Musisz użyć jakiegoś GUI aby móc obsługiwać komunikaty
pzdro
 

Pascalt

Użytkownik
Dołączył
Grudzień 29, 2007
Posty
32
Dzieki za odpowiedz, mam do dyspozycji Borland C++ Builder, wiec jako ze tam jest zaimplementowana biblioteka VCL - moge rowniez z niej skorzystac... Tylko gdzie szukac w VCL rozwiazania mojego problemu?
 

h4x

Użytkownik
Dołączył
Styczeń 6, 2008
Posty
107
A co do pytanie to niestety w konsoli jest to niemożliwe.[/b]
dla ciebie napewno.

jak piszesz komunikator do duzo prosciej ci bedzie go zrobic pod ip (a nawet pod udp, bezpieczniej, system zablokuje gniazdo). No chyba ze zalezy ci bardzo na ciaglosci (przesylanie plikow) to wtedy tcp.
2 watki, 1 blokuje na wsarecvfrom i jak cos dojdzie wywala na stdout (writefile), a 2 czeka na jakis input (afair readfile, poczytaj manual czy blokuje i co i jak) i wsasendto.

Mam nadzieje ze rozumiesz jak to bedzie wygladalo pod konsola ;]
 

Pascalt

Użytkownik
Dołączył
Grudzień 29, 2007
Posty
32
No szczerze mowiac, to nie bardzo jak na razie rozumiem, ale posiedze troche nad tym i licze, ze cos z tego wyjdzie.
Na innych forach znalazlem jeszcze propozycje uzycia WSAAsyncSelect, WSAEventSelect lub WaitForMultipleEvents w tym celu...
A jesli chodzi o to, jak to bedzie wygladac w konsoli, to chyba rowniez nie ma zadnej przeszody, zeby stworzyc komunikator, ktory bedzie mozna latwo przeniesc na program budowany w Builderze (znaczy chodzi z uzyciem biblioteki VCL, bo w Builderze i tak to pisze, ale jako aplikacje konsolowa;)).
Czy jest jakas przeszoda, zeby stosowac sockety w VCL?

Pozdrawiam i dzieki za zainteresowanie sie tematem.
 

h4x

Użytkownik
Dołączył
Styczeń 6, 2008
Posty
107
zadaj sobie pytanie, chcesz sie czegos nauczyc czy jechac na vcl?

program konsolowy od okienkowego rozni sie wejsciem i wyjsciem. Konsola moze byc tylko 1 (1 stdout/in/err). I nie sugeruj sie tymi funkcjami async bo to nie o to chodzi, ja ich wcale nie uzywam do jak dla mnie sa chybione. 2 wątki, 1 odbiera i wypluwa a 2 czeka na input i wysyla.

A jesli chodzi o to, jak to bedzie wygladac w konsoli, to chyba rowniez nie ma zadnej przeszody, zeby stworzyc komunikator, ktory bedzie mozna latwo przeniesc na program budowany w Builderze[/b]
nie rozumiem, uwazasz ze w builderze to bedzie inny program? Poprostu bedzie ciezszy, wolniejszy no ale szybciej go napiszesz, az milo exploitowac potem takie cos (zwlaszcza ze piszesz pod siec ;]).
 

feer

Użytkownik
Dołączył
Październik 29, 2008
Posty
1
<div class='quotetop'>CYTAT(Zergi @ 17.03.2008, 19:20) <{POST_SNAPBACK}></div>
Też stworzyłem podobny temat jest gdzieś jeszcze napewno, A co do pytanie to niestety w konsoli jest to niemożliwe. Musisz użyć jakiegoś GUI aby móc obsługiwać komunikaty
pzdro[/b]


WSAEventSelect()
WSAWaitForMultipleEvents()
WSAEnumNetworkEvents()
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
a nie latwiej poprostu oprzec to na wątkach. gdzie w jednej z nich bedzie ciagle odbieranie i wyrzucanie na stdout a bezposrednio w main bedzie wysylanie.

wg. mnie najprostrza i najskuteczniejsza metoda.
 
Do góry Bottom