1 szerver több kliens

1 szerver több kliens
2006-12-08T10:43:55+01:00
2006-12-08T12:54:12+01:00
2022-07-26T14:23:59+02:00
kaiser_8
Sziasztok!!

Elkeztem egy hálózatban játszható játékot írni. A lényeg az lenne hogy van 1 szerverem és 2 vagy több de max 6 kliensem. Utánna olvasgattam és megtudtam hogy delhiben a server és client type -t nonBlockingra kell állítani ha lehetséges hogy egyszerre több kliens küld üzit a szervernek. A gondom az az hogy meg akarom valósítani a chat részében hogy ha egy kliens üzit küld akkor azt a szerver fogadja és kiküldi minden csatlakozott kliensnek:

for x :=0 to ServerSocket1.Socket.ActiveConnections-1 do begin if Form1.ServerSocket1.Socket.Connections[x].ReceiveText <> ''then str:=Form1.ServerSocket1.Socket.Connections[x].ReceiveText; end; for x :=0 to ServerSocket1.Socket.ActiveConnections-1 do Form1.ServerSocket1.Socket.Connections[x].SendText(str);

Ezzel csak az a probléma hogy nem müködik.
Ha viszont kiveszem az ifet akkor úgy müködik hogy az utoljára csatlakozott kliens üziét elküldi mindenkinek, de az az előtt csatlakozott kliensek üzenete sima üres string.

Help me!!! pls!!!
Mutasd a teljes hozzászólást!
Ember küzdj és ne alázd le magad!

for x:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin str:=Form1.ServerSocket1.Socket.Connections[x].ReceiveText; if str<>'' then for y:=0 to ServerSocket1.Socket.ActiveConnections-1 do Form1.ServerSocket1.Socket.Connections[y].SendText(str); end;
Mutasd a teljes hozzászólást!

  • Na ez több sebből vérzik.

    Ha az if benne van, akkor ez a sor
    if Form1.ServerSocket1.Socket.Connections[x].ReceiveText <> ''then
    kiüríti a buffert, és itt
    str:=Form1.ServerSocket1.Socket.Connections[x].ReceiveText;
    már nem marad mit kiolvasni.

    Egyébként meg a ciklus értelmetlenül végigpörög az összes kapcsolaton, egymás után felülírva
    a str változót, úgyhogy csak a legutolsó marad meg.
    Gondolom úgy akartad, hogy ez a sor
    for x :=0 to ServerSocket1.Socket.ActiveConnections-1 do Form1.ServerSocket1.Socket.Connections[x].SendText(str);
    is a cikluson belül fusson le,
    csak akkor ne használd mindkettőre ugyanazt a ciklusváltozót.

    Mutasd a teljes hozzászólást!
  • Halika!

    Azt szeretném megoldani hogy egy klienstől beérkezett üzenetet elküldeni minden kliensnek.

    Ehhez az első for ciklus = beolvassa egy stringbe az üzit
    A második for ciklus = elküldi mindenkinek

    Írtad hogy kiüríti a buffert akkor hogy lehetne megoldani másképpen?

    Mutasd a teljes hozzászólást!
  • Ember küzdj és ne alázd le magad!

    for x:=0 to ServerSocket1.Socket.ActiveConnections-1 do begin str:=Form1.ServerSocket1.Socket.Connections[x].ReceiveText; if str<>'' then for y:=0 to ServerSocket1.Socket.ActiveConnections-1 do Form1.ServerSocket1.Socket.Connections[y].SendText(str); end;
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen!!!!!

    A forrást és a tanácsot is!!!!!!!



    ui.: Ha lehetne a tanácsér még addnék +50 pontot
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd