UDP オブジェクトを作成するフォームがあり、UDP クラスで UDPClient が作成され、受信データは EndReceive を使用して BeginReceive メソッドで処理されます。
byte[] を変換した後、受信したデータの文字列を beginreceive メソッド内からテキストを追加してコンソールに出力すると、受信したデータのみが出力され、追加されたテキストは出力されません。
そのため、受信したデータが不完全なようです。
文字列が印刷されるとき、NewLine と追加された「done」は表示されません。
どんな助けでも素晴らしいでしょう!!
ありがとう
class Udp
{
public EventHandler _dataReceived;
public Udp()
{
int receiverPort = 1248;
UdpClient receiver = new UdpClient(receiverPort);
string discovery = "<?xml version=\"1.0\"?><ServiceQuery></ServiceQuery>";
receiver.BeginReceive(new AsyncCallback( DataReceived), receiver);
IPEndPoint end = new IPEndPoint(IPAddress.Broadcast, 1248);
receiver.Send(Encoding.ASCII.GetBytes(discovery + "\0"), discovery.Length + 1, end);
}
private void DataReceived(IAsyncResult ar)
{
UdpClient c = (UdpClient)ar.AsyncState;
IPEndPoint receivedIpEndPoint = new IPEndPoint(IPAddress.Any, 1248);
Byte[] receivedBytes = c.EndReceive(ar, ref receivedIpEndPoint);
string receivedText = ASCIIEncoding.ASCII.GetString(receivedBytes);
Console.WriteLine("\n");
if(_dataReceived != null)
{
Console.Write(receivedIpEndPoint + ": " + receivedText + Environment.NewLine + "done");
_dataReceived(receivedText, new EventArgs());
}
c.BeginReceive(new AsyncCallback(DataReceived), c);
}
}