诸位达人,我现在想建一个UDP监听指定端口,收到的数据报做分析,可我怎么建立他的监听,按照例子,好象不行,代码如下:
UdpClient Server;
Thread startServer
Server = new UdpClient(7202);
startServer = new Thread(new ThreadStart(UDPServer));
startServer.Start();private void UDPServer()
{
while (!Done)
{
try
{
byte[] bytes = Server.Receive(ref Cfg.localEndPoint); string Read_str = Encoding.ASCII.GetString(bytes,0,bytes.Length);
if (Read_str=="DeskLogeRefresh\0")
{
Cfg.RequestUpdateStatus = true;
}
}
catch(SocketException)
{
break;
}
}
}
我印象中 UDPServer()应该一有数据来就执行一下,可他只是在一开始只执行了一次,就不再动弹了,哪位达人指点一下,我这段程序是用在PDA上的,接收数据是C#,发广播是其它开发工具开发的.
UdpClient Server;
Thread startServer
Server = new UdpClient(7202);
startServer = new Thread(new ThreadStart(UDPServer));
startServer.Start();private void UDPServer()
{
while (!Done)
{
try
{
byte[] bytes = Server.Receive(ref Cfg.localEndPoint); string Read_str = Encoding.ASCII.GetString(bytes,0,bytes.Length);
if (Read_str=="DeskLogeRefresh\0")
{
Cfg.RequestUpdateStatus = true;
}
}
catch(SocketException)
{
break;
}
}
}
我印象中 UDPServer()应该一有数据来就执行一下,可他只是在一开始只执行了一次,就不再动弹了,哪位达人指点一下,我这段程序是用在PDA上的,接收数据是C#,发广播是其它开发工具开发的.
private IPEndPoint receivePoint ;
private int port = 8080 ;
private int ip = 127001 ;
private Thread startServer
server = new UdpClient ( port ) ;
receivePoint = new IPEndPoint ( new IPAddress ( ip ) , port ) ;
startServer = new Thread ( new ThreadStart ( start_server ) ) ;
startServer.Start ( ) ;byte[] recData = server.Receive ( ref receivePoint ) ;ASCIIEncoding encode = new ASCIIEncoding ( ) ;
string Read_str = encode.GetString ( recData ) ;
string[] temp = Read_str.Split ( "/".ToCharArray ( ) ) ;
byte[] sendData =encode.GetBytes( System.DateTime.Now.ToString ( ) ) ;
server.Send ( sendData , sendData.Length , temp[0] , Int32.Parse ( temp[1] ) ) ;
会不会在这里卡住了?
private void UDPServer()
{
while (!Done)
{
try
{
byte[] bytes = Server.Receive(ref Cfg.localEndPoint);
string Read_str = Encoding.ASCII.GetString(bytes,0,bytes.Length);
if (Read_str=="DeskLogeRefresh\0")
{
Cfg.RequestUpdateStatus = true;
}
}
catch(SocketException)
{
isQuit = true;
break;
}
catch(Exception)
{
isQuit = true;
//这里的异常如果你不捕捉只会死掉当前线程,不会死进程,那么你看不出任何不对
}
}
}
会不会在这里卡住了?
-------------------------------
这句一定会卡住的,如果没有数据进来的话。
private void Form1_Load(object sender, System.EventArgs e)
{
udp = new System.Net.Sockets.UdpClient(7202);
t = new System.Threading.Thread(new System.Threading.ThreadStart(listen));
//将线程转为后台运行(当托管线程关闭的时候此现成也关闭)
t.IsBackground=true;//*******这个方法在PocketPC中没有
t.Start();
}void listen()
{
//线程等待2秒
System.Threading.Thread.Sleep(2000);// 确保 client2 正在接收
//创建远程主机网络端点(这里未明确指定,表示任何远程机端点)
System.Net.IPEndPoint ep =new System.Net.IPEndPoint(System.Net.IPAddress.Any,0);
while(true)
{
string abc = System.Text.Encoding.UTF8.GetString(udp.Receive(ref ep));//***这个在PocketPC中还需要2个参数
label1.Text = abc;
}
}