Diskuze: TCP--Client _ Server
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Nemůže to být tím, že už je připojený (po té první zprávě) a pokouší se připojit podruhé? Nikde nevidím, že by se po odeslání zprávy odpojil...
Ja si myslím že chyba je skôr v servery, lebo keď sa klient chce druhý krát pripojiť a nepodarí sa mu to(logicky ked už pripojený je) tak vyhodí hlášku "Nepodarilo sa pripojiť" a pokračuje dalej na odosielanie textu počas toho ako je stále pripojený.
To je právě to, co si nemyslím, protože máš pokus o připojení v try-catch bloku, vyhodí výjimku a dál nepokračuje...
Neviem no. Keď som to mal urobené v Win Forms kde som mal tlačitko zvlášť na pripojenie a zvlášť na odosielanie textu z textboxu tak sa to chovalo rovnako. Na začiatku som kliknul pripojiť, išlo fajn. Potom som napísal text a poslal, tiež išlo. Znova som napísal text a dal poslať no správa už nedošla/neodišla. S gui som mal tento základ klient-server rovnaký.
zkus to spojení prostě uzavřít
class Program
{
static Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("Prípájam!....");
try
{
s.Connect(IPAddress.Parse("127.0.0.1"), 80);
Console.WriteLine("Pripojene!");
}
catch
{
Console.WriteLine("Nepodarilo sa pripojiť");
}
Console.WriteLine("Vložte text čo chcete poslať!:");
string dataP = Console.ReadLine();
try
{
byte[] data = Encoding.Unicode.GetBytes(dataP);
s.Send(data);
Console.WriteLine("Odoslané");
Console.WriteLine("-------------------");
Console.WriteLine("-------------------");
Console.WriteLine("-------------------");
}
catch
{
Console.WriteLine("Niekde nastala chyba!");
}
finally
{
//zavřít spojení se serverem
}
}
}
}
Ok dik, keď budem doma tak to skúsim či to bude fungovať.
Mě osobně připadâ zvláštní se u TCP komunikace pořád odpojovat a připojovat... Co takhle prostě posunout while cyklus, aby se to jednou připojilo a opakovalo se jenom načtení + odeslání zpráv?
A vidím i chybu na serveru (a to jsem na do C# TCPčka jenom nahlídnul, abych viděl, jak by bylo těžký udělat spyware )
socket.Listen(1);
while (true)
{
Socket acceptdata = socket.Accept();
Ty řekneš serveru, že má pustit k sobě jenom jednoho klienta, ale snažíš se ho několikrát připojit-odeslat/přijmout zprávu-odpojit a celé dokola. Jistě, že ti to nefunguje, protože při dalším pokusu o připojení ti server "dalšího" klienta již odmítne. (Viz tip, co jsem napsal výše). Pokud říkám bláboly, tak mě opravte, v C# teprv začínám. (+ jsou 2 hodiny v noci )
Zobrazeno 10 zpráv z 10.