Komentarze do Komunikator w C#
Zibi
1 lipca 2006,
22:35
naprawde dobry artykul i dobre wprowadzenie do BackgroundWorker, ja kiedys probowalem napisac komunikator gg na watkach ale mialem duze problemy z ich synchronizacja
przydalaby sie jakas darmowa wersja opensource komponentu takiego jak GGdotNet.GGLite 2 (http://www.mksoft.pl/GGdotNet2/), moze zna ktos taka?
BadRay
4 lipca 2006,
20:27
Także szukałem takiego komponentu lecz nie znalazłem nic oprócz powyższego, za to znalazłem opis protokołu gg, bardzo przydatne przy tworzeniu aplikacji symulującej gg. Oto adres http://dev.null.pl/ekg/docs/protocol.html
bigman
6 lipca 2006,
17:00
wydaje mi się, że podczas próby kompilacji projektu (Visula C# EE)powinien wystąpić błąd przy użyciu funkcji "wyswetl" w osobnym watku (w metodzie DoWork komponentu BackgroundWorker). Do kontrolek znajdujacych sie na formie nie powinno się odwoływać z innego wątku w sposób jawny. Może coś przeoczyłem, ale chyba autor nie pisze tego wprost.
Pozdrawiam
fanatari
10 lipca 2006,
11:22
w metodzie Polaczenie_DoWork
brakuje linijki
NetworkStream stream = klient.GetStream();
jest tylko w źródłach
maciek
18 maja 2007,
13:34
Fajnie szkoda tylko że komunikator nie działa... :(
rytek
21 maja 2007,
17:23
Jak zrobić, by serwer obsługiwał połączenia z kilku klientów?
Bo mi za żadne skarby nie chce się to udać :/
gosc
10 czerwca 2007,
0:58
a czy ktos probowal pisac komunikator w ktorym mozliwe byloby polaczenie klient-klient? ja utknelam na tym ;/
:/
14 sierpnia 2007,
14:45
Możecie mi mailem wyslac kody programu?mój mail to 09.ii.aakp2@gmail.com
krzycho
14 sierpnia 2007,
16:52
Mi również są potrzebne te kody. krzychoster@gmail.com
mivos
18 października 2007,
13:34
widze ze sezon zaliczen na uczelniach w pelni ....
adriannek
13 listopada 2007,
21:32
hmm a ja cos nie rozumiem tego programu pisze w c komunikator ala GG ale niechce mi zadzilac laczenie miedzy klientami ma ktos moze taki program ??
patryk9200
14 listopada 2007,
22:06
Szkoda że nie działa.... zna ktoś morze sposób aby do serwera mogło sie podpiąć kilka klientów ?? , oraz rzeby morzna było urzywać własnej nazwy??
Jak ktoś wie to prosze o e-maila z informacją jak to zrobić... patryk9200@op.pl oraz GG:10108383
patryk g
14 listopada 2007,
23:32
Jak napisać komunikator z wieloma klijentami itp. polecam http://cyfbar.republika.pl/kurs5.html
Bartek
17 listopada 2007,
14:27
Czy ktoś wie jaki skrypt uzyc lub jak napisac aby mozna bylo dodac do wlasnego komunikatora rozmowy glosowe?? Bardzo mi na tym zalezy... Z gory dziekuje moj mail bartek996@wp.pl
Michał
26 listopada 2007,
19:44
Potrzebuje napisać komunikator internetowy - czat w c# Znalazlem ciekawy projekt w C++ http://cyfbar.republika.pl/kurs5.html ale z pewnością , aby wykoać to w C# będzie trzeba uzyć BackgroundWorker. czy ktoś dysponuje podobnymi programami ?? Będę wdzięczny za każdą pomoc lub zlece wykonanie projektu. Proszę o kontakt pod gg : 2026806 lub email: proweb@o2.pl Całość ważna do końca tygodnia
Sonics
18 stycznia 2008,
15:40
Ten komunikator jest super oczywiscie po drobnych poprawkach...
sławek
12 lutego 2008,
14:56
jak się robi te kontrolki RichTextBox?????
ktoś_ekstra
1 marca 2008,
10:01
Takie pytanko... można taki serwer zrobić w asp.net i odpalić go jako strone www?
John Doe
10 marca 2008,
12:55
jak dodać ten plik komunikator.cs ??
M.F___
7 września 2008,
8:52
Byłoby super jak by działało
gb83
10 września 2008,
14:13
wszystko pięknie ładnie tylko że w C#2008 EE jest jakiś problem z funkcją wyswitl niby się kompiluje program ale przy próbie połączenia funkcja wyświetl się sypie i zgłasza problem "Nieprawidłowa operacja między wątkami: do formantu "txtLog" uzyskiwany jest dostęp z wątku innego niż wątek, w którym został utworzony." nie wiem skąd nagle tego typu problem
JA
15 września 2008,
16:57
Komunikator w pelni sprawny.... nie zapominajcie jednak, ze jest on do komunikacji SIECIOWEJ ;">
Po kilku poprawkach i modyfikacjach nawet fajny programik wychodzi :-)
Janekk
25 września 2008,
14:41
zrobilem to co tu pisze ale na wielu kompach to nie dziala todziala jak jest jakas biblioteka ale nie wiem z kad ja wziac :/ prosze o pomoc piszcie na GG 6347525 lub na maila VandziorX@o2.pl z gory dziex
JA
25 września 2008,
20:28
Drogi Jankku,
Sciagnij z internetu .NET FrameWork 2.0, ktorego wymaga c#. Domyslnie Twoj komputer posiada juz wersje 1.2, ale jest stara i nie ma wszystkich bibliotek.
Andrew®
30 września 2008,
12:52
śmiać mi się chce jak czytam te komentarze, tak jak by same 10cio latki to pisały... (nie twierdze że wszystkie komentarze takie są)
Damian
21 października 2008,
0:02
A ma ktoś pomysła na naprawienie tego kodu? Ja musze zrobić takiego lan czata do jutra do 17.00:)
Matthias
29 października 2008,
15:27
Damian, a co tu naprawiać? :O
Ten co mu dziala :P
4 listopada 2008,
18:14
Ludzie opamiętajcie się trochę , przecież tu wszystko działa, a mało tego jest jeszcze w miarę dobrze opisane. Nauczcie się może na początek obsługiwać Visual Studio, a później dawać komentarz które powinny coś mądrego wnosić.
Byku
7 grudnia 2008,
17:29
Heh, widzicie dużo ludzi myśli że wystarczy VisualStudio zainstalować i wkleić kawałek kodu z neta a będą mieli super wypasiony działający program, i nie będą musieli sie zastanawiać jak on działa.
Komentarze typu
sławek
12 lutego 2008,
14:56
jak się robi te kontrolki RichTextBox?????
to delikatnie mówiąc tragedia
<br />
Ale nie da sie zablokować dostępu do internetu ludziom poprostu leniwym, którzy by najbardziej chyba chcieli żeby im na maila gotowy projekt wysłac i to jeszcze zmieniony według własnych wymagań:/<br />
Olo
17 grudnia 2008,
18:43
Niby fajny artykulik ale z błędem !
W pliku "Serwer.cs" o tu gdzie podkreślone :
[color=#1e1e1e; font-family: -webkit-monospace; font-size: 11px; line-height: 18px">{<br /> o.Focus();[/color"><br /> o.AppendText(tekst);<br /> o.ScrollToCaret();<br /> txtWysylane.Focus();<br />}
Jeden błąd aplikacja do bani !
Olo jeszcze raz
17 grudnia 2008,
18:47
To troche nie wyszło więc jeszcze raz Błąd jest wlnijce 2 w klasie "frmSerwer
"
@
16 lutego 2009,
13:51
dodaj wyjatek do zapory systemu
Sokeks
10 marca 2009,
1:41
Fakt jest problem z tym wielowatkowym prowadzeniem sprawy, czyli to co zasygnalizowali bigman i gb83. Z tego co sie dotyczalem (choc jeszcze pewien nie jestem, musze pogryzc sprawe), to chodzi o te BackgroundWorkery, ktore dzialaja asynchronicznie. dlatego tez trzeba korzystac z delegatow i statycznej metody Invoke. Bawiac sie troche "na malpe" skonstruowalem nastepujaca metode wyswietl, ktora dziala:
public void wyswietl(RichTextBox o, string tekst)<br /> {<br /> if (InvokeRequired)<br /> {<br /> InvokeGotFocus(o, EventArgs.Empty); //o.Focus();<br /> Invoke(new StringCallback(o.AppendText), tekst); //o.AppendText(tekst);<br /> Invoke(new ScrollCallback(o.ScrollToCaret)); //o.ScrooToCaret<br /> InvokeGotFocus(txtWysylanie, EventArgs.Empty); //txtWysylanie.Focus();<br /> }<br /> }
Ale poki, co jeszcze nie potrafie wytlumaczyc dokladnie co skad sie bierze - zrobilem to troche intuicyjnie w oparciu o milion nieprecyzyjnych artykulow na necie. Jeszcze pogryze problem.
Sokeks
10 marca 2009,
1:43
To zle wyglada, ale jak skasujecie te <br/>, to macie ta metode. Jakby ktos uczony w pismie (czyli w C#) mogl sie wypowiedziec, to byloby smurfastycznie.
Sokeks
12 marca 2009,
1:37
No dobra, zgryzlem problem. Wg mnie i mojego kumpla (ktory w przeciwienstwie do mnie, cos tam wie o C#) zaprezentowane tutaj programy moga dzialac i najprawdopodobniej beda dzialac poprawnie po zbuildowaniu do .exe, ale sa tu powazne bledy w sztuce, na co sie bedzie oburzac kompilator (przez tryb debuggingu wyrzuci milion wyjatkow), a w praktyce program moze sie rozjechac przy niesprzyjajacych sytuacjach. Chodzi o fakt dzialania trzech watkow (sam form i 2 BackgroundWorkery).
Sokeks
12 marca 2009,
1:40
Dlatego tez, potrzebny bedzie:
1. Przerobienie funkcji wyswietl na nastepujaca postac:
delegate void WyswietlInvoker(RichTextBox o, string tekst);public void
wyswietl(RichTextBox o, string tekst){
if(this.InvokeRequired){
this.BeginInvoke(new WyswietlInvoker(wyswietl), new object["> {o, tekst});
return;
}else{
o.Focus();
o.AppendText(tekst);
o.ScrollToCaret();
txtWysylanie.Focus();
}
}
Sokeks
12 marca 2009,
1:41
2. Stworzenie funkcji do ustawiania kontrolek nastepujacej postaci:
public void delegate SetValueDelegate(Object obj, Object val, Object["> index);
public void SetControlProperty(Control ctrl, String propName, Object val){
System.Reflection.PropertyInfo propInfo = ctrl.getType().GetProperty(propName);
this.BeginInvoke(new SetValueDelegate(propInfo.SetValue), new Object["> {ctrl, val, null});
}
i teraz nalezu wywolywac ta funkcji do ustawiania kontrolek takich jak cmdWyslij, czy cmdSluchaj.
blacky
17 marca 2009,
15:05
Fajnie, dzieki za solucje, ale przydaloby sie umiescic jeszcze pare informacji pomocniczych np:
a) InvokeRequired - sprawdza czy proces wywołujący jest różny od procesu, w którym kontrolka została utworzona. Jeśli tak to zwraca wartość true.
b) BeginInvoke (Delegate) - tworzy się nowy wątek wykonujący daną funkcję przekazana za pomoca delegata.<br /><br /><br />c) BeginInvoke (Delegate, Object[">) - tworzy się nowy wątek wykonujący daną funkcję przekazana za pomoca delegata, ale dodatkowo mozemy przekazac cos za pomoca Object["> np: new object[">{o,tekst}.
<br /><br />dodatkowo polecam jeszcze uzupelnienie lektury<br />https://codeguru.pl/forum-posts-4595-35.aspx<br />msdn.microsoft.com
blacky
17 marca 2009,
15:25
Jeszcze ciekawostka bo nie wiem czy ktos zauwazyl (strona 2 petla 1):
while ( !listener.Pending() )<br />{<br /> if (this.polaczenie.CancellationPending)<br /> {
.............. <br />jak ta petla dziala w momecie kiedy nasz server juz dziala a jeszcze nikt sie nie polaczyl to aktywnosc procesora wzrasta do 100%.
maras
4 maja 2009,
8:44
niekonsekwentnie przygotowany kurs, gdyby nie zrodlo do sciagniecia, nigdy bym sie nie polapal w tych bledach ;)
lukasz
9 czerwca 2009,
14:58
A gdzie jest źródło do ściągnięcia?
xxx
9 czerwca 2009,
21:47
nie działa barany, wszystkie te wasze kody są złe
donixs
25 czerwca 2009,
12:27
wszystko pieknie dziala...
JEDYNA UWAGA KTOREJ NIENAPISALISCIE JEZELI KTOS SAM TO NAPISZE ALBO SKORZYSTA ZE ZRODLA (nie pliki typu .exe) TO PRZY URUCHAMIANIU TRZEBA DAC CTR+F5 (bez debagera a nie samo F5) chodzi o to ze debager wyrzuci pewne wyjatki dotyczace watkow i stad moze "niby niedzialac"
ale mam pare zastrzezen:
1) wogole nieopisana funkcja wyswietl (ze taka jest i trzeba ja dopisac)
2) w serwerze pare bledow
- w tym co opisaliscie brak NetworkStream stream = klient.GetStream();
w funkcji Polaczenie_DoWork
...
wyswietl(txtLog, "Zażądano połączenia\n");
NetworkStream stream = klient.GetStream();//niema na sronce
w = new BinaryWriter(stream);
r = new BinaryReader(stream);
...
- w funkcji cmdSluchaj_Click (w zrodlach) podwojnie napisane:
cmdWyslij.Enabled = false;
ale to szczegol
3)przy uruchomieniu samego klienta bez serwera (lub z ale nieuruchomionym) moim zdaniem powinien sie "rozlanczac" po jakims czasie"
4)przy uruchomieniu najpierw klienta a pozniej serwera niedochodzi do polaczenia a jednak powinno byc jakos to rozwiazane "czasowo z odswierzaniem"
5)jak dla mnie brakuje rowniez wiecej opisow, wytlumaczenia co gdzie jak po co i dlaczego zeby jednak to byl tutorial i mozna bylo sobie ten kodzik jakos przerobic do wlasnych celow
MOZE TO NA TYLE ALE OGOLNIE JEST GIT :)
donixs
25 czerwca 2009,
12:39
aaa wiedzialem ze o czyms zapomnialem po rozlaczeniu klienta w serwerze dalej "widoczny" jest button wyslij (cmdWyslij_Click.Enabled = true;)a niepowinien co po kliknieciu powoduje blad (w serwerze to dziala ze po rozlaczeniu oba wyslik-klienta i serwera sa "niewidoczne") jesli kogos to niteresuje to w serwerze wystarczy dodac w funkcji Odbieranie_DoWork : po while cmdWyslij.Enabled = false; (tak jak to jest roziwazane u klienta) pewnie stad w zrodlach sie wzielo to podwojenie (co opisalem w pkt.2) )
aw22
26 lipca 2009,
23:26
Czy znacie jakiś prosty przykład komunikatora internetowego C# (który działa). Bardzo mi jest potrzebny.
bp
21 sierpnia 2009,
0:30
Nie wiem czy to bedzie mialo dla kogos znaczenie ale zmiana wielkosci litery ma znaczenie <br />while ( !listener.Pending() )<br />{<br /> if (this.polaczenie.CancellationPending)<br /> {<br /> if (klient != null) klient.Close();<br /> listener.Stop();<br /> Chodzi konkretnie o polaczenie w pierwszym BackgroundWorker-erze
Pozdrawiam
donixs
30 września 2009,
20:23
przeciez ten doskonale dziala... z jednym malym ale -> jezeli masz zewnetrzne ip i postawisz na nim serwer to mozna sie z tym czatem laczyc a jezeli masz ip wew. to zapomnij... dlaczego tak jest to juz nie temat na ten komentarz... (google potega)
jono
23 listopada 2009,
14:19
da ktoś gotowca zrobionego za pomoca tej strony? Żeby inni mogli sobie pozmieniac nazwę i inne bajery? xD
SideC
7 stycznia 2010,
22:49
Co to, DONIXS, znaczy "zewnętrzne IP"? Wyjaśnij to, proszę, bo u mnie oba programy dobrze chodzą na jednym komputerze. Nie potrafią, natomiast, skomunikować się, gdy serwer jest na moim, a klient na innym, i w kliencie podaję moje IP. Port jest dobry, bo chodzi w ten sposób inny, podobny, program.
SideC
7 stycznia 2010,
23:13
Zapomniałem wspomnieć, że kompilator (IDE 2008 Express) nie przyjął:
listener = new TcpListener(int.Parse(txtPort.Text));
więc napisałem:
IPAddress localAddr=IPAddress.Parse("127.0.0.1");
lub
IPAddress localAddr=IPAddress.Parse("tutaj moje IP");
i
listener=new TcpListener(localAddr,int.Parse(textPort.Text));
hmmm
7 lutego 2010,
9:30
Ma ktoś cały, gotowy projekt? Nic z tego nie rozumiem!?
olekskin1121
19 lutego 2010,
12:30
dlaczego podczas nacisniecia przycisku "czekaj na polaczenie" program sie wywala?
otrzymuje komunikat "Nieprawidłowa operacja między wątkami: do formantu "txtLog" uzyskiwany jest dostęp z wątku innego niż wątek, w którym został utworzony."
blacky
26 lutego 2010,
21:14
olekskin1121 wyjatek pojawia sie dlatego ze nie przekazales Invoke. Zobacz wyzej juz byl poruszany temat.
pmarek3
10 września 2010,
12:47
Witam wsyztskich.
Nie wiem czy ktoś tu jeszcze zagląda, ale zadam oryginalne pytanie.
Czy jest możliwe napisanie w C# aplikacji typu Server-Client, która działa nir tylko w lokalnej sieci LAN, ale również w sieciach WAN? Aby każdy mnie dobrze zrozumiał nieco przybliżę problem.
Otóż, załóżmy że mam w domu sieć z routerem. Mój kolega z innego miasta również ma taką sieć. Routery to przeciez bramy domyślne każdej z naszych sieci. Czy muszę konstruować wirtualnego LANa (używając np Hamachi) aby się z nim połączyć? Czy jeśt możliwość, żeby klient odpalany u mnie odnalazł serwer odpalany u kolegi z innego miasta?
Z góry dziękuję za wszelkie komentarze ze wskazówkami czy też odpowiedziami.
Pozdrawiam.
pmarek3
10 września 2010,
12:54
Jeżeli ktoś byłby tak uprzejmy, aby poinformować mnie na maila (pmarek3@wp.pl), że zamieścił komentarz w związku z moim zapytaniem, to już w ogole będzie rewelacyjnie;)
Anonim
21 marca 2011,
18:07
Nie no.
Pisze cyt: "
Teraz dodajmy do naszego projektu nowy plik: komunikaty.cs. Stworzymy
w nim klasy KomunikatySerwera oraz KomunikatyKlienta, które będą
zawierały stałe tekstowe, za pomocą których serwer i klient
będą się
porozumiewać. Oto treść pliku:"
Ale jaki plik dodajemy ???!!!???
bingo009
2 kwietnia 2011,
21:42
To można nawet uzyć do stworzenia prostej gry Multiplayer. Jak się dobrze języka naucze to popróbuje.
BeRnI
28 maja 2011,
18:01
Czy komunikator jest tylko do komunikacji LAN?
Dzon
5 listopada 2011,
10:01
Skoro interesujecie sie kontrolka BackgroundWorker, to moze korzystniej jest wykorzystac takie metody jak: ReportProgress i ProgressChanged. Nie trzeba bawic sie delegatami.
Jarek93pl
7 grudnia 2011,
15:34
Działa to w internecie a nie w lanie ? jak tak to co trzeba zrobić ?
Dodaj swój komentarz