C# Socket编程。。。简单错误。。。速度速度来拿分。。。。。

[复制链接]
查看11 | 回复3 | 2011-4-11 15:03:13 | 显示全部楼层 |阅读模式
先上代码:接收端:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.Diagnostics;
namespace test接收端
{

public partial class Form1 : Form

{

IPEndPoint ip = new IPEndPoint(IPAddress.Parse("192.168.0.171"), 8001);

bool isStop = true;

private static UdpClient udpClient = new UdpClient(8001);

private Socket socket;

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

label1.Text = "This a server, the host name is:" + Dns.GetHostName() + ip;

label3.Text = "";

}



private void button1_Click(object sender1, EventArgs e)

{

this.rese();

}

private void rese()

{

Thread.Sleep(2000);

int recv;

byte[] data = new byte[10240];

socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

socket.Bind(ip);

label1.Text = "This a server, the host name is:" + Dns.GetHostName() + ip;

IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);

EndPoint remote = (EndPoint)sender;

IPEndPoint endPoint = null;

while(isStop){


recv = socket.ReceiveFrom(data, ref remote);

label2.Text = "Data receive from:" + Encoding.ASCII.GetString(udpClient.Receive(ref endPoint)) + "";

label3.Text = Encoding.ASCII.GetString(data, 0, recv);




}


}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

isStop = false;

}

}
}
Form界面简单。。。
断点测程序运行到这一句 recv = socket.ReceiveFrom(data, ref remote)会未响应。。。这是怎么回事。。。
分数可以追加。。。。。


回复

使用道具 举报

千问 | 2011-4-11 15:03:13 | 显示全部楼层
这是因为该方法在未接收到目标机器的信息时会在这等着和accept方法一样,这里可以设置一个超时socket.ReceiveTimeout = 5000; //设置超时时间
try
{
nBytes = socket.ReceiveFrom(ReceiveBuffer, 256, 0, ref EndPointFrom);
}
catch(Exception e)
//捕捉超时这个事件
{

回复

使用道具 举报

千问 | 2011-4-11 15:03:13 | 显示全部楼层
private void button1_Click(object sender1, EventArgs e)
{
this.rese(); ===> Thread.Sleep(2000); 你这样弄 相当于给你窗体的进程sleep了 当然会无响应
}private void butt
回复

使用道具 举报

千问 | 2011-4-11 15:03:13 | 显示全部楼层
isten
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行