udp在窗体上的显示遇到的问题

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 显示用户ip
{
    public partial class Form1 : Form
    {
        private static Socket socketUdp;
        private static IPEndPoint ip;
        private static string hostName;
        private static byte[] data;
        private static EndPoint ipe2;

        public Form1()
        {
            InitializeComponent();
            socketBroadcast();
        }

        private void socketBroadcast()
        {
            socketUdp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            ip = new IPEndPoint(IPAddress.Broadcast, 6800);
            socketUdp.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
            hostName = Dns.GetHostName();
            string stringData = ":USER:" + hostName;
            data = Encoding.ASCII.GetBytes(stringData);
            Thread thread = new Thread(sendMessage);
            thread.Start();
            receiveMessage();
        }

        private void sendMessage()
        {
            while(true)
            {
                socketUdp.SendTo(data, ip);
                Thread.Sleep(5000);
            }
        }

        private void receiveMessage()
        {
            Socket socketReceive = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPEndPoint ipe1 = new IPEndPoint(IPAddress.Any, 6800);
            ipe2 = ipe1;
            socketReceive.Bind(ipe1);
            while(true)
            {
                byte[] data1 = new byte[1024];
                int recv = socketReceive.ReceiveFrom(data1, ref ipe2);
                string stringData = Encoding.ASCII.GetString(data1, 0, recv);
                string messageHead = stringData.Substring(0, 6);
                string messageBody = stringData.Substring(6);
                switch (messageHead)
                {
                    case ":USER:":
                        {
                            string[] sBody = messageBody.Split(‘;‘);
                            listBox1.Items.Add(ipe2.ToString());
                            //不管他实现结果是什么,但是连winform窗体都出现不了。
                            break;
                        }
                }
                //MessageBox.Show(string.Format("receive from:{0} ,ip is {1}", stringData, ipe2.ToString()));

            }

        }

    }
}

1、这段代码请老司机看看,遇到了一个奇怪的问题,在循环里面是出现不了窗体的,为什么。我没有明白,没有弄循环就能窗体出来。

刚开始学,然后就想实现一下上线通知,下线通知这个,但是,却死活弄不出来。可以的话,老司机给给思路。谢谢。

2、还有很奇怪的问题,在思路理清的情况下,还有很多代码写不出来是不是很奇怪。基础不扎实吧

3、纯写一个即时通讯的软件,对于新手来说是不是最基本的,

时间: 2024-07-31 05:54:34

udp在窗体上的显示遇到的问题的相关文章

xml存储通讯录数据并用C#程序解析出来显示在窗体上

1.先创建一个xml文件存放数据 2.在VS中新建一个项目,创建一个Windows窗体应用程序(路径项目名称自己修改) 3.在窗体上拖出如下控件,并修改好各个控件的属性,方便在代码中确定是哪个控件,最好不要使用系统默认的控件名称(可以起一些有意义的名称方便在写代码时确认控件要显示的数据....没看明白自己体会) . 4.双击窗体编写代码,首先要解析xml文件必须在头文件中添加 using System.Xml; 头文件 然后要想加载出来就显示数据就必须在这个 private void Form1

7.2.2 在窗体上显示绘图

绘图与第四章的示例类似.因为绘图需要一定的时间,我们将在内存中创建位图,绘制好文档,然后,在窗体上显示位图,而不是每次窗体失效时都绘制文档.我们先看一下非常有用的函数式编程模式,这一节就将使用. "Hole in the Middle(中间有洞)"模式 [真心不知道,Hole in the Middle 是什么意思?] 写代码的一个常见情形,是首先进行初始化,然后,是函数的核心部分,最后,是一些清理工作:在程序中的多个位置,重复执行类似的操作,初始化和清理部分没有变化,而只有核心部分不

Delphi_子窗体继承父窗体后如何显示父窗体上的控件

1.创建子窗体Form1 File -> New -> Form,新建一个form,在form的单元文件中修改 2.子窗体中引用父窗体单元 uses TFatherForm 3.将子窗体中代码修改 TForm1 = class(TForm) 改为 TForm1 = class(TFatherForm) //TFatherForm为被继承的窗体 4.在Form窗体上弹出右键菜单,选择View As Text 把第一行的Object 改成 inherited 后保存: 5.在Form标签上点击右键

在窗体上创建自己的光标并输入文字

我们知道在文本框等可以接收输入的组件中,我们可以看到闪烁的光标,并可以输入文字,如果我们在,比如窗体上时,因为不支持输入,也无法显示闪烁的光标,那我们 有办法做自己的输入吗?当然可以,下面我们演示在Form上来输入文字. 用到的API函数如下 GetTextMetrics:获取程序当前的字体信息,存放到TEXTMETRIC结构中 CreateCaret:为系统插入标记创建一个新的形状,并且将插入标记的属主关系指定给特定的窗口.插入标记的形状.可以是线.块或位图 ShowCaret:显示光标 Se

dephi XE - 实现主窗口在任务栏上不显示 (转)

方法一 以前的代码不能用.貌似在Delphi2010后就开始不行了,搜索了一下,得到办法: 1 修改工程文件添加一句:Application.MainFormOnTaskbar := False; 2 在主窗体的 OnShow 事件中写下 varStyle: Integer;beginStyle := GetWindowLong(Handle, GWL_EXSTYLE);SetWindowLong(Handle, GWL_EXSTYLE, Style and (not WS_EX_APPWIND

如何控制其他程序窗体上的窗口控件

用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是回调函数.我的理解是这样的:回调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows操作系统,比如其他的程序等等之类的.但是什么时候被调用却不知道了.回调函数一般是按照调用者的要求定义好参数和返回值的类型,你向调用者提供你的回调函数的入口地址,然后调用者有什么事件发生的时候就可以随时按照你提供的地址调用这个函数通知你,并按照预先规定好的形式传递参数.所以很多人打比方,说回调函数还真有点像您随身带的BP机:告诉别人

[译]- 6-1 排列窗体上的控件(Laying Out Widgets on a Form)

 排列窗体上的控件(Laying Out Widgets on a Form) 中英文对照:form(窗体),layout(布局或者排列,意思是进行窗体上控件的排列的过程,如大小位置等) absolute positioning(绝对位置定位),manual layout(手工布局), layout managers(布局管理器) Qt中有三种方式对窗体上的控件进行布局管理:绝对位置定位(absolute positioning),手工布局(manual layout),布局管理器(layout

小数运算需要注意什么? 接口和抽象类 WinForm窗体上两个panel,怎么实现一个panel固定漂浮在另一个panel之上

小数运算需要注意什么? 1. 生活中0.1+0.2=0.3, 计算机中可不是这样,为什么呢? 大家都知道计算机类型都是有数据范围的.整形int范围是 正负21亿左右,小数类型同样也是有范围的,但是即使0.1~0.2之前如果问你有多少小数? 无穷个!!! 那么有限的范围怎么表示无限的数据呢? 告诉你表示不了,只能存储一个无限接近的数. 另外大家都知道计算机所有数据都是二进制,0.5即 2的-1次方,0.25是2的-2次方,同样解释了为什么不能表达所有小数. 这样大家也就明白下面这个例子 100个0

将文件拖曳到窗体上, 并获取其完整路径 【C++ Builder下实现】转

1. 在窗体的头文件.h里声明处理函数和消息映射, 如: [cpp] view plain copy class TForm1 : public TForm { ... void __fastcall HandleDropFiles(TMessage &Owner; ... BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_DROPFILES,TMessage,HandleDropFiles) END_MESSAGE_MAP(TForm) }; 2. 在窗体的实现文件.c