Пересылка данных по сети - 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;
}
}
}