c# .net 6, tcp\ip klijent i server testni projekat. potrebna pomoc.

Borko Djurovic

Početnik
Poruka
5
Pozdrav,

Pravim TCP\IP klijent i server za obicnu razmjenu tekstualnih poruka.
Tek sam poceo sa upotrebom System.Net.Sockets i System.Net namespace-a.
Skoro sam zavrsio sa radom ali nedostaje finalna realizacija (slanje poruke).
Projekat je radjen u WPF, .NET 6, VisualStudio 2022 Community Edition i nalazi se na GitHub-u. Ovo je link: Repozitorijum

U projektu postoje dvije glavne klase: AdmonteServer i AdmonteClient. sa sledecim sadrzajem:
AdmonteServer:
C#:
using System;
using System.Net;
using System.Net.Sockets;

namespace Server
{
    public class AdmonteServer
    {
        private readonly IPAddress? _hostAddress;
        private readonly int _portNumber;
        private readonly TcpListener _listener;
        private Socket? _socket;

        public AdmonteServer(string hostAddress, string portNumber)
        {
            if (!IPAddress.TryParse(hostAddress, out _hostAddress))
                throw new ArgumentException("Given argument HostAddress is not valid.");

            if(!Int32.TryParse(portNumber, out _portNumber))
                throw new ArgumentException("Given argument PortNumber is not valid.");

            this._listener = new TcpListener(_hostAddress, this._portNumber);
        }

        #region Events
        public event EventHandler<AdmonteMessageEventArgs>? OnMessageReceived;
        public event EventHandler<EventArgs>? OnStart;
        public event EventHandler<EventArgs>? OnStop;
        #endregion

        public void Start()
        {
            Console.WriteLine("Starting ...");
            this._listener.Start();

            if (OnStart != null)
                OnStart(this, new EventArgs());
        }

        public void Stop()
        {
            Console.WriteLine("Stopping ...");
            this._listener.Stop();

            if (OnStop != null)
                OnStop(this, new EventArgs());
        }
    }
}

AdmonteClient:
Kod:
using System;
using System.Net.Sockets;
using System.Net;

namespace Client
{
    public class AdmonteClient
    {
        private IPAddress? _hostAddress;
        private int _portNumber;
        private TcpClient _tcpClient;
        private readonly Socket _socket;
        private IPEndPoint? _endPoint;

        public AdmonteClient()
        {
            _tcpClient = new TcpClient();
            _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        }

        public void ConnectTo(string hostAddress, string portNumber)
        {
            if (!IPAddress.TryParse(hostAddress, out _hostAddress))
                throw new ArgumentException("Given argument HostAddress is not valid.");

            if (!Int32.TryParse(portNumber, out _portNumber))
                throw new ArgumentException("Given argument PortNumber is not valid.");

            this._endPoint = new IPEndPoint(_hostAddress, _portNumber);
            //_tcpClient.Connect(_endPoint);
            _socket.Connect(_endPoint);

            if (ClientConnected != null)
                ClientConnected(this, new EventArgs());
        }

        public void Disconnect()
        {
            _tcpClient.Close();

            if(ClientDisconnected != null)
                ClientDisconnected(this, new EventArgs());
        }

        public void SendMessage(string message)
        {
            this._socket.SendTo(System.Text.Encoding.ASCII.GetBytes(message), 0, _endPoint);

            if (MessageSent != null)
                MessageSent(this, new EventArgs());
        }

        #region Events
        public event EventHandler<EventArgs>? MessageSent;
        public event EventHandler<EventArgs>? ClientConnected;
        public event EventHandler<EventArgs>? ClientDisconnected;
        #endregion
    }
}

Molim za pomoc.
Hvala!
 

Back
Top