Принять входящую команду по TCP - C#
Формулировка задачи:
Собственно весь вопрос. Надо написать класс который принимает команду по TCP протоколу.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net; namespace SARM { class TCP { public delegate void GetCommandEventHandler(byte[] data); protected int _port; IPEndPoint iep; private byte[] data = new byte[1024]; private int size = 1024; private Socket server; #region Конструктор //=============================================================================================== public TCP(int port) { this._port = port; Zapros(); } //=============================================================================================== #endregion /// <summary>Получил команду</summary> public event GetCommandEventHandler WasGet; #region Свойства //=============================================================================================== public int port { get { return _port; } } //=============================================================================================== #endregion //=============================================================================================== protected void OnGet(byte[] data) { if (WasGet != null) WasGet(data); } //=============================================================================================== void ReceiveData(IAsyncResult iar) { Socket client = (Socket)iar.AsyncState; int recv = client.EndReceive(iar); if (recv == 0) { client.Close(); server.BeginAccept(new AsyncCallback(AcceptConn), server); return; } client.BeginReceive(data, 0, size, SocketFlags.None, new AsyncCallback(ReceiveData), client); OnGet(data); } //=============================================================================================== void AcceptConn(IAsyncResult iar) { Socket oldserver = (Socket)iar.AsyncState; Socket client = oldserver.EndAccept(iar); client.BeginReceive(data, 0, size, SocketFlags.None, new AsyncCallback(ReceiveData), client); } //=============================================================================================== public virtual void Zapros()//инициализация сокетов { server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); iep = new IPEndPoint(IPAddress.Any, port); server.Bind(iep); server.Listen(1000); server.BeginAccept(new AsyncCallback(AcceptConn), server); } //=============================================================================================== } //=============================================================================================== public class HumanEventArgs { protected int hp; public int port { get { return hp; } } public HumanEventArgs(int port) { this.hp = port; } } //=============================================================================================== public class GetCommandArgs : HumanEventArgs { protected int command; public int Command { get { return command; } set { command = value; } } //=============================================================================================== public GetCommandArgs(int Command, int port) : base(port) { this.command = Command; } //=============================================================================================== } }
пробую так...не выходит(
Решение задачи: «Принять входящую команду по TCP»
textual
Листинг программы
if (recv < 14) { client.BeginReceive(data, 0, 14, SocketFlags.None, new AsyncCallback(ReceiveData), client); } // else OnGet(data); else Console.WriteLine("Буфер: " + data.Length + " Буфер в байтах: " ......);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д