Пересылка данных по сети - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! В приложении я пересылаю данные по сети. Отсылаю сколько передано данных, а потом, например, собственно строку. Но число может быть больше одного байта. Как мне разбирать входящие данные???

Решение задачи: «Пересылка данных по сети»

textual
Листинг программы
using System;
using System.Net;
using System.Net.Sockets;
 
namespace Fusion {
    public class TcpReceiver {
 
        public TcpReceiver(IPAddress address, int localPort) {
            TcpListener listener = new TcpListener(address, localPort);
            listener.Start();
            listener.BeginAcceptTcpClient(ListenerConnectedCallback, listener);
        }
 
        ~TcpReceiver() {
            _client.Close();
        }
 
        private void ListenerConnectedCallback(IAsyncResult asyncResult) {
            _client = (asyncResult.AsyncState as TcpListener).EndAcceptTcpClient(asyncResult);
            _stream = _client.GetStream();
 
            _stream.BeginRead(buffer, 0, buffer.Length, DataReceivedCallback, null);
        }
 
        private void DataReceivedCallback(IAsyncResult asyncResult) {
 
            int length = _stream.EndRead(asyncResult);
            _stream.Flush();
 
            byte[] ni = new byte[length];
            Array.Copy(buffer, ni, length);
 
            if (length != 0)
                OnDataReceived(ni);
 
            _stream.BeginRead(buffer, 0, buffer.Length, DataReceivedCallback, null);
 
        }
 
        private byte[] buffer = new byte[512];
 
        private NetworkStream _stream;
        private TcpClient _client;
 
        public event EventHandler<DataReceivedEventArgs> DataReceived;
 
        protected virtual void OnDataReceived(byte[] data) {
            if (DataReceived != null)
                DataReceived(this, new DataReceivedEventArgs(data));
        }
 
        public bool Connected { get { return _client == null ? false : _client.Connected; } }
    }
 
    public class DataReceivedEventArgs : EventArgs {
        public byte[] Data { get; private set; }
 
        public DataReceivedEventArgs(byte[] data) {
            Data = data;
        }
 
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы