void Read(IAsyncResult obj) { ReceiveObj client = (ReceiveObj)obj.AsyncState; int size = 0; try { //прочитать сообщение size = client.socket.EndReceive(obj); } catch (Exception ex) { client.message = ex.ToString(); //текст ошибки передается через тотже тип что и сообщение OnError(this, client); return; } client.message = Encoding.UTF8.GetString(client.buffer, 0, size); //событие - пием сообщения OnReceive(this, client); //продолжить прием сообщение с этого сокета try { client.socket.BeginReceive(client.buffer, 0, 1024, SocketFlags.None, Read, client); } catch (Exception ex) { client.message = ex.ToString(); OnError(this, client); } }
public Socket ClientStart(string ip, int port) { Socket soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); soket.Connect(new IPEndPoint(IPAddress.Parse(ip), port)); ReceiveObj r = new ReceiveObj(); r.socket = soket; //начало приема сообщений soket.BeginReceive(r.buffer, 0, 1024, SocketFlags.None, Read, r); return(soket); }
private void Accept(IAsyncResult obj) { //получить прослушивателя Socket listener = (Socket)obj.AsyncState; //получить сокет нового клиента Socket clientSocket = listener.EndAccept(obj); //событие OnAccept(this, clientSocket); //для нового клиента создается экземпляр для передачи всего необходимого ReceiveObj r = new ReceiveObj(); r.socket = clientSocket; //начать прием сообщений на новом сокете r.socket.BeginReceive(r.buffer, 0, 1024, SocketFlags.None, Read, r); //продолжить прием соединений listener.BeginAccept(Accept, listener); }