komunikator-blad??

0

Witam.
Prosze o pomoc gdyz nie jestem zaawansowanym programista (raczej poczatkujacym i raczej nie programista ;-) ).
Chce zrobić prosty komunikator do przesylania tekstu miedzy komputerami.
Uzywam Delphi 6 Enterprise. Umiescilem na formularzu komponent client i serwer.
Tekst do wyslania wpisywany jest w Edit'a a odbierany pojawia sie w ListBoxie.
Aplikacja ma dzialac na tej zasadzie ze po wlaczeniu programu komponent client jest nieaktywny a serwer nasluchuje:

zdarzenie Event's :

with AThread.Connection do
begin
Listbox1.Items.Add(AThread.Connection.ReadLn(edSendText.Text))

end;

Gdy chcemy wyslac jakas wiadomosc do reszty osob wpisujemy w edit'a tekst i wciskamy przycisk WYSLIJ a w nim :

if not client.Connected then
server.Active:=false;
client.Host:=edit1.Text;
client.Connect;
with client do
begin
checkfordisconnect;
if connected then
begin
writeln (edSendText.Text);
listbox1.Items.Add(edSendText.Text);
client.Disconnect;
server.Active:=true;
end;
end;

Nie wiem gdzie zrobilem blad ale chcialem uzyskac efekt ze aplikacje po wlaczeniu nasluchuja a w momencie wcisniecia WYSLIJ dana aplikacja przelacza sie z serwera na clienta i nadaje.
Wszystko dziala ok. Po wlaczeniu 2 aplikacji obie nasluchuja. Przy wyslaniu tekstu z komputera pierwszego na drugim pojawia sie wiadomosc ale odwrotnie juz nie dziala-czyli wysylajac z drugiego komputera na pierwszym nie pojawia sie nic.

porty sa ustawione na 10001
Porsze o pomoc

0

hmm takie przelaczanie z klienta na serwer przy kazdorazowym wyslaniu wiadomosci jest niepotrzebne, lepiej zrob tak ze jesli aplikacja sie uruchomi i nie bedzie mogla sie podlaczyc do innej aplikacji (bo bedzie wylaczona) to niech zostanie serwerem, zas jesli polaczy sie bez problemu to niech zostanie klientem.

0

ok dRum
tez tak myslalem
tylko moj problem polega na tym ze jak na komputerze np pierwszym ustawie serwer (bo uruchomilem tam program w pierwszej kolejnosci) to nie za bardzo moge (albo nie wiem jak) wyslac z niego komunikat do reszty
wystepuje jakis konflikt gniazdek
a co do artykulu to nie czytalem poniewaz korzystam z modemu telefonicznego i nie za bardzo mam dostep do internetu

a wiec teraz moje pytanie brzmi: jak z aplikacji ktora jest serwerem wysylac dane na pozostale komputery?

0

Jesli aplikacja jest serwerem to musisz ja oprogramowac tak, ze za kazdym razem gdy klient sie polaczy to zostanie dodany do "ListyPolaczonych" (TThreadList), zas gdy klient wysle przesylke do serwera to ten wysyla ja do wszystkich klientow, czyli nic innego jak tylko petelka for dla listy polaczonych. Podejrzewam, ze i tak nie bedziesz wiedzial jak to wszytko zrobic, pofatygowalem sie i wrzucilem na serwer instalke, ktora kiedys komputer swiat ekspert zamiescil na plycie. Jest to instalka prostego komunikatora takiego jakiego ty potrzebujesz: http://www.1lo-brodnica.pl/dRum/komunikator.exe Oka powodzenia przy pracy, pozdrawiam

0

ok ale cos takiego juz zrobilem
to moze inaczej to wyjasnie
musze napisac gre sieciowa zeby zaliczyc semestr
gre juz praktycznie mam tylko teraz robie obsluge sieci
z boku ma byc zrobiony komunikator zeby wszyscy uzytkownicy mogli rozmawiac
i tu mam problem-mam kilka narzuconych z gory warunkow
np. gra ma byc BEZ SERWERA
ma to dzialac na tej zasadzie ze spotykaja sie max 4 osoby i podaja sobie nawzajem IP (kazdy musi wpisac 4 IP w okienko konfiguracyjne)
i zaczynaja gre
myslalem o zrobieniu czegos takiego jak aplikacja ktora stale nasluchuje (komponent server) a w momencie wysylania tekstu wylacza sobie server i na chwile staje sie clientem

czy da sie cos takiego zrobic?

dRum'owi dziekuje za odpowiedzi i chec pomocy.

0

Ale po co chcesz na chwile stawac sie klientem ? ... zeby odebrac wiadomosc ? troche bez sensu, jesli jestes serwerem to rowniez nie masz problemu z odbiorem wiadomosci.

0

nie wiem czy Cie dobrze rozumiem
mam zrobic aplikacje tylko z serverem?
a jak mam wysylac? czy serwerm da sie zrobic cos w stylu:

writeln (edSendText.Text);

gdzie edSendText jest Editem

Bo taka komenda wysylam to co napisze w edicie z clienta

0

z serwerem jest podobnie tylko, ze tutaj juz musisz podac konkretnie do kogo chcesz wyslac wiadomosc. W instalce, ktora ci wrzucilem na serwer ladnie to jest oprogramowane, przestudiuj ja dobrze.

0

ok zrobilem cos po swojemu-moze nie jest to fachowe rozwiazanie ale prawie dziala
potrzebuje tylko jednej poprawki
mianowicie wszystko chodzi (przesyla w obie strony) tylko po dwukrotnym wcisnieciu WYSLIJ
za kazdym razem po wpisaniu tekstu trzeba wcisnac 2 razy przycisk wyslij
gdzie jest blad?

umiescilem na formie TserverSocket i TClientSocket
w onCreate formularza wylaczam klienta i wlaczam server
w momencie klikniecia WYSLIJ jest kod:

if server.Active=true then
begin
server.Active:=false;
client.Host:=edit1.Text;
client.Port:=10001;
client.Active:=true;
client.Socket.SendText(edSendText.Text);
listbox1.Items.Add(edSendText.Text);
client.Socket.Disconnect(10001);
client.Active:=false;
server.Active:=true;
end else
begin
client.Host:=edit1.Text;
client.Active:=true;
client.Socket.SendText(edSendText.Text);
listbox1.Items.Add(edSendText.Text);
client.Active:=false;
server.Active:=true;
end;

w zdarzeniu servera onClientRead wpisalem:

listbox1.Items.Add(socket.ReceiveText);

gdzie tkwi blad ze trzeba po dwa razy klikac??

1 użytkowników online, w tym zalogowanych: 0, gości: 1