System.Net.Sockets - prosty komunikator

System.Net.Sockets - prosty komunikator
xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • 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 :(
            }
        }
    }
}

Ktos
  • Rejestracja: dni
  • Ostatnio: dni
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: dni
  • Ostatnio: dni
  • 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ć.

DA
  • Rejestracja: dni
  • Ostatnio: dni
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.

xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • 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?

A1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0

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

xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • 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 ;/

konserwa
  • Rejestracja: dni
  • Ostatnio: dni
  • 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.

xeo545x39
  • Rejestracja: dni
  • Ostatnio: dni
  • 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.

konserwa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 282
0

co to za komunikator na 2 osoby :).

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.