111,126
社区成员
发帖
与我相关
我的任务
分享
namespace WindowsApplication1
{
public partial class Form1 : Form
{
static Socket serverSock;
static AsyncCallback receiveCallback;
static byte[] buff;
static EndPoint senderIP;
delegate void OnReceiveplayer(string text);
static int count=0;
private void Form1_Load(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//异步
buff = new byte[1024];
senderIP = new IPEndPoint(IPAddress.Any, 0);
receiveCallback = new AsyncCallback(OnDataReceived);
serverSock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
serverSock.Bind(new IPEndPoint(IPAddress.Any, 9050));
serverSock.BeginReceiveFrom(buff, 0, buff.Length, SocketFlags.None,
ref senderIP, receiveCallback, serverSock);
//Console.ReadLine();
}
private void button1_Click(object sender, EventArgs e)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,
ProtocolType.Udp);
IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 9050);//255.255.255.255
//IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("192.168.1.255"), 9050);
//string hostname = Dns.GetHostName();
string sendmsg = "005003,005,45-45-54-54-ac-4A,online";
byte[] data = Encoding.UTF8.GetBytes(sendmsg);
sock.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 1);
sock.SendTo(data, iep1);
//sock.SendTo(data, iep2);
sock.Close();
}
private void OnDataReceived(IAsyncResult ar)
{
Socket udpSocket = ar.AsyncState as Socket;
int bytesRecved = udpSocket.EndReceiveFrom(ar, ref (EndPoint)senderIP);
//Console.WriteLine("{0}传来消息{1} ", senderIP.ToString(), System.Text.Encoding.ASCII.GetString(buff, 0, bytesRecved));
//MessageBox.Show("{0}传来消息{1} "+ senderIP.ToString() +" "+ System.Text.Encoding.ASCII.GetString(buff, 0, bytesRecved));
this.OnReceiveplayerd(System.Text.Encoding.UTF8.GetString(buff, 0, bytesRecved));
serverSock.BeginReceiveFrom(buff, 0, buff.Length, SocketFlags.None,
ref senderIP, receiveCallback, serverSock);
}
private void OnReceiveplayerd(string text)
{
//listView1.Items.Clear();
if (this.listView1.InvokeRequired)
{
OnReceiveplayer d = new OnReceiveplayer(OnReceiveplayerd);
this.Invoke(d, new object[] { text });
}
else
{
//分割收到的信息
count++;
string[] tmpstr = text.Split(',');
if (tmpstr.Length == 4)
{
ListViewItem li1 = new ListViewItem();
li1.SubItems[0].Text = tmpstr[0];
li1.SubItems.Add(tmpstr[1]);
li1.SubItems.Add(tmpstr[2]);
li1.SubItems.Add(tmpstr[3]);
listView1.Items.Add(li1);
}
else
{
ListViewItem li1 = new ListViewItem();
li1.SubItems[0].Text = tmpstr[0];
listView1.Items.Add(li1);
}
label1.Text = count.ToString();
}
}
private void buttonGetIndices_Click(object sender, EventArgs e)
{
System.Timers.Timer t = new System.Timers.Timer(1000);
t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed);
t.AutoReset = true;
t.Enabled = true;
//listView1.CheckedIndices
}
void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
int num = 0;
foreach (ListViewItem item in listView1.Items)
{
if ((item != null) && item.Selected)
{
num++;
}
}
//return num;
MessageBox.Show("");
}
//System.Windows.Forms.ListView.CheckedIndexCollection checked_indices = (System.Windows.Forms.ListView.CheckedIndexCollection)listView1.Invoke(new cichandler(ToGetCheckedIndices));//ok
delegate System.Windows.Forms.ListView.CheckedIndexCollection cichandler();
System.Windows.Forms.ListView.CheckedIndexCollection ToGetCheckedIndices() {
if (listView1.InvokeRequired)
{
cichandler cic = new cichandler(ToGetCheckedIndices);
cic.Invoke();
}
return listView1.CheckedIndices;
}
delegate int GetCheckedCountHandler();
int GetCheckedCount() {
/* int count = new GetCheckedCountHandler(GetCheckedCount).Invoke();
throw: 未处理 System.StackOverflowException
*/
if (listView1.InvokeRequired)
{
GetCheckedCountHandler counter = new GetCheckedCountHandler(GetCheckedCount);
counter.Invoke();
}
return listView1.CheckedIndices.Count ;
}
public int CheckedIndicesCount(ListView lv)
{
if (!lv.CheckBoxes)
{
return 0;
}
int num = 0;
foreach (ListViewItem item in lv.Items)
{
if ((item != null) && item.Checked)
{
num++;
}
}
return num;
}
delegate int SelectedIndicesHandler(ListView listview);
public int SelectedIndicesCount(ListView lv)
{
if (lv.InvokeRequired) {
SelectedIndicesHandler selectedhandler = new SelectedIndicesHandler(SelectedIndicesCount);
selectedhandler.Invoke(lv);
}
int num = 0;
foreach (ListViewItem item in lv.Items)
{
if ((item != null) && item.Selected)
{
num++;
}
}
return num;
}
delegate ListView.ListViewItemCollection ListViewItemsHandler(ListView listview);
ListView.ListViewItemCollection ListViewItems(ListView lv) {
if (lv.InvokeRequired) {
/* System.StackOverflowException
ListViewItemsHandler getitems = new ListViewItemsHandler(ListViewItems);
ListView.ListViewItemCollection items = getitems.Invoke(listView1);
*/
ListViewItemsHandler getitems = new ListViewItemsHandler(ListViewItems);
getitems.Invoke (lv);
}
return lv.Items;
}
}
}
delegate int IndicesHandler(ListView listview);
public int SelectedIndicesCount(ListView lv)
{
if (lv.InvokeRequired)
{
IndicesHandler handler = new IndicesHandler(SelectedIndicesCount);
return (int)lv.Invoke(handler, new object[] { lv });
}
ListViewItemsHandler itemshandler=new ListViewItemsHandler (ListViewItems);
ListView.ListViewItemCollection Items = itemshandler.Invoke(lv);
int num = 0;
foreach (ListViewItem item in Items)//lv.Items)
{
if ((item != null) && item.Checked)//Selected)
{
num++;
}
}
return num;
}
delegate ListView.ListViewItemCollection ListViewItemsHandler(ListView listview);
ListView.ListViewItemCollection ListViewItems(ListView lv)
{
if (lv.InvokeRequired)
{
/* System.StackOverflowException
ListViewItemsHandler getitems = new ListViewItemsHandler(ListViewItems);
ListView.ListViewItemCollection items = getitems.Invoke(listView1);
*/
ListViewItemsHandler getitems = new ListViewItemsHandler(ListViewItems);
return (ListView.ListViewItemCollection)lv.Invoke(getitems, new object[] { lv });
}
return lv.Items;
}
System.Windows.Forms.ListView.CheckedIndexCollection ToGetCheckedIndices()
{
if (listView1.InvokeRequired)
{
cichandler cic = new cichandler(ToGetCheckedIndices);
//cic.Invoke();
return listView1.Invoke(cic); //<---
}
return listView1.CheckedIndices;
}