110,533
社区成员
发帖
与我相关
我的任务
分享
Socket socketClient2 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socketClient2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
SocketAsyncEventArgs sendEvent = new SocketAsyncEventArgs();
string find = "M-SEARCH * HTTP/1.1\r\n";
byte[] buffer = Encoding.UTF8.GetBytes(find);
sendEvent.SetBuffer(buffer, 0, buffer.Length);
sendEvent.RemoteEndPoint = new IPEndPoint(IPAddress.Parse(GROUP_ADDRESS), GROUP_PORT);
//sendEvent.RemoteEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 20000);
sendEvent.Completed += (s, args) =>
{
if (args.SocketError == SocketError.Success)
{
if (args.LastOperation == SocketAsyncOperation.SendTo)
{
//resize the buffer
buffer = new byte[1024 * 8];
args.SetBuffer(buffer, 0, buffer.Length);
//args.RemoteEndPoint = new IPEndPoint(IPAddress.Any, GROUP_PORT);
socketClient2.ReceiveFromAsync(args);
}
else if (args.LastOperation == SocketAsyncOperation.ReceiveFrom)
{
String ret = Encoding.UTF8.GetString(buffer, 0, args.BytesTransferred);
Debug.WriteLine(string.Format("Receive From: {0}", args.RemoteEndPoint.ToString()));
Debug.WriteLine(ret);
socketClient2.ReceiveFromAsync(args);
}
}
else
{
MessageBox.Show(args.SocketError.ToString());
}
};
socketClient2.SendToAsync(sendEvent);
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Bind(new IPEndPoint(IPAddress.Any, 20000));
SocketAsyncEventArgs ev = new SocketAsyncEventArgs();
byte[] buf = new byte[1024];
ev.SetBuffer(buf, 0, buf.Length);
ev.RemoteEndPoint = new IPEndPoint(IPAddress.Any, 20000);
ev.Completed += (s, arg) =>
{
if (arg.SocketError == SocketError.Success)
{
if (arg.LastOperation == SocketAsyncOperation.ReceiveFrom)
{
EndPoint ep = arg.RemoteEndPoint;
string ss = Encoding.UTF8.GetString(buf, 0, arg.BytesTransferred);
Console.WriteLine(string.Format("Receive from {0}:{1}", ep.ToString(), ss));
socket.ReceiveFromAsync(ev);
//send
byte[] send = Encoding.UTF8.GetBytes("Received!");
SocketAsyncEventArgs ev2 = new SocketAsyncEventArgs();
ev2.SetBuffer(buf, 0, buf.Length);
ev2.RemoteEndPoint = ep;
ev2.Completed += (s2, arg2) =>
{
if (arg.SocketError != SocketError.Success)
{
Console.WriteLine(arg.SocketError.ToString());
}
};
socket.SendToAsync(ev2);
}
}
};
socket.ReceiveFromAsync(ev);
Console.ReadKey();