System.Net.Sockets - prosty komunikator

System.Net.Sockets - prosty komunikator
xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

Witam! Próbuję napisać prosty komunikator, za wzór używam tego kodu: http://csharp.net-informations.com/communications/csharp-server-socket.htm
Niestety przy linijce zdefiniowania klienta aplikacja dalej nie rusza... Próbowałem 2 metodami, tak jak jest tam na stronie i normalnie od razu client = server.AcceptTcpClient(); bez tego default i to samo :( To chyba wina tego adresu, nie wiem czy to dobrze zrobiłem. Jest konsktruktor z samym portem, niestety VS wywala błąd obselete, że jest przestarzały i żeby użyć ze IPAddress. Proszę o pomoc, to mój kod:

Kopiuj
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public static string Time()
        {
            return System.DateTime.Now.Hour.ToString() + ":" + System.DateTime.Now.Minute.ToString() + ":" + System.DateTime.Now.Second.ToString();
        }
        static void Main(string[] args)
        {
            byte[] bip = { 127, 0, 0, 1 };
            System.Net.IPAddress ip = new System.Net.IPAddress(bip);
            System.Net.Sockets.TcpListener server = new System.Net.Sockets.TcpListener(ip, 1024);
            System.Net.Sockets.TcpClient client = default(System.Net.Sockets.TcpClient);
            server.Start();
            Console.WriteLine(Time() + " >> Server started");
            client = server.AcceptTcpClient(); //tu koniec, aplikacja działa, ale nie reaguje

            if (client.Connected)
            {
                Console.WriteLine(Time() + " >> Client connected");
                //tu miała być reszta, ale zatrzymałem się przy tamtym :(
            }
        }
    }
}


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
Ktos
Moderator
  • Rejestracja:prawie 23 lata
  • Ostatnio:około 5 godzin
0

AcceptTcpClient() jest metodą blokującą - dopóki się do serwera nie podłączy klient, dopóty aplikacja "nie pójdzie" dalej, tylko tam będzie stać.

xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

Acha, czyli jest OK, tylko teraz muszę napisać klienta i jak się podłączy to pójdzie dalej? I jeszcze trochę nie rozumiem po co w serwerze klient, chyb a klient ma być z zewnątrz a nie tu i tu, tzn. ja się nie znam, ale fajnie jak by ktoś wytłumaczył dlaczego tu i tu musi być.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
edytowany 1x, ostatnio: xeo545x39
DA
  • Rejestracja:prawie 16 lat
  • Ostatnio:prawie 14 lat
0

No jasne że są osobno, o co chodzi?
Serwer czeka na jakieś połączenie na okreslonym porcie i adresie IP; wobec czego musisz napisać klienta który właśnie na tym porcie się podłączy xd (wykona Connect())

A gdy już ktoś to zrobi, to musisz jakoś zarządzać tym podłączonym klientem - dlatego właśnie masz TcpClient - gdy np. piszesz chat, masz listę TcpClientów, do których piszesz wiadomości etc.

edytowany 1x, ostatnio: Daron
xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

Mam teraz jeszcze pytanie, jak zapobiec błędom w kliencie, gdy serwer się rozłączy? client.Connected zawsze daje true po połączeniu nawet, gdy client już się odłączył i przez to mam błędy. Jak rozwiązać ten problem?


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
A1
  • Rejestracja:około 14 lat
  • Ostatnio:ponad 11 lat
  • Postów:106
0

Obsługa wyjątków, try i catch ?

xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

Nie o exception mi chodziło, a o zwykłe bugi. Po rozłączeniu klient dostaje miliony pustych wiadomości albo się crashuje ;/


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
konserwa
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:282
0

Dobrze powiedział ponieważ gdy rozłączasz klienta połączenie jest zerwane i następuje błąd który przechwycisz.

Ten twój crash to przerwanie połączenia.


Przejdę, przejdę, myślał Red. Nie pierwszy raz, przecież przez całe życie właśnie tak, po szyję w gównie, a nad głową pioruny, zawsze tak było...
edytowany 2x, ostatnio: konserwa
xeo545x39
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Kosmos
  • Postów:1571
0

Wyjątek zapobiegł crash'owi. Teraz tylko jak zaradzić tym pustym wiadomościom? Dalej je dostaje przy programowym zamknięciu serwera ;/

EDIT:
Już z wiadomościami też sobie poradziłem. Po prostu zamykam aplikację i nie bawię się w jakieś zamykanie socket'ów.


Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
edytowany 2x, ostatnio: xeo545x39
konserwa
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad 4 lata
  • Postów:282
0

co to za komunikator na 2 osoby :).


Przejdę, przejdę, myślał Red. Nie pierwszy raz, przecież przez całe życie właśnie tak, po szyję w gównie, a nad głową pioruny, zawsze tak było...
xeo545x39
Uczę się dopiero :D I właśnie zastanawiam się jak zrobić dla więcej osób - trzeba będzie kombinować z wątki, klientami itd. nie mam na to sił... Na Borlandzkich socketach było łatwiej i szybciej..
konserwa
właśnie że i tak jest łatwo -_- nowy wątek ze sesją i git :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.