哪位大神帮帮忙啊!急!!!!!!!!!!
public partial class UDPSocket : Component{
private IPEndPoint ServerEndPoint = null; //定义网络端点
private UdpClient UDP_Server = new UdpClient(); //创建网络服务,即UDP的Socket
private System.Threading.Thread thdUdp; //创建一个线程
public delegate void DataArrivalEventHandler(byte[] Data, IPAddress Ip, int Port);
//通过托管在控件中定义一个事件
public event DataArrivalEventHandler DataArrival;
private string localHost = "127.0.0.1"; //设置默认的IP地址
//在“属性”对话框中显示localHost属性
[Browsable(true), Category("Local"), Description("本地IP地址")]
public string LocalHost //封装字段
{
get { return localHost; }
set { localHost = value; }
}
private int localPort = 11000; //设置默认端口号
//在“属性”对话框中显示localPort属性
[Browsable(true), Category("Local"), Description("本地端口号")]
public int LocalPort //封装字段
{
get { return localPort; }
set { localPort = value; }
}
private bool active = false;
//在“属性”对话框中显示active属性
[Browsable(true), Category("Local"), Description("激活监听")]
public bool Active
{
get { return active; }
set
{ //该属性读取值
active = value;
if (active) //当值为true时
{
OpenSocket(); //打开监听
}
else
{
CloseSocket(); //关闭监听
}
}
}
public UDPSocket()
{
InitializeComponent();
}
public UDPSocket(IContainer container)
{
container.Add(this);
InitializeComponent();
}
private void OpenSocket()
{
Listener(); //调用监听方法
}
private void CloseSocket()
{
if (UDP_Server != null) //当Socket不为空时
UDP_Server.Close(); //关闭Socket
if (thdUdp != null) //如果子线程正在被使用
{
Thread.Sleep(30); //使主线程睡眠
thdUdp.Abort(); //中断子线程
}
}
protected void Listener() //监听
{
//将IP地址和端口号以网络端点存储
ServerEndPoint = new IPEndPoint(IPAddress.Any, localPort);
if (UDP_Server != null)
UDP_Server.Close(); //关闭初始化的Socket
UDP_Server = new UdpClient(localPort); //创建一个新的端口号监听
UDP_Server.Client.ReceiveBufferSize = 1000000000; //接收缓冲区大小
UDP_Server.Client.SendBufferSize = 1000000000; //发送缓冲区大小
try
{
thdUdp = new Thread(new ThreadStart(GetUDPData)); //创建一个线程
thdUdp.Start(); //执行当前线程
}
catch (Exception e)
{
MessageBox.Show(e.ToString()); //显示线程的错误信息
}
}
private void GetUDPData() //获取当前接收的消息
{
while (active) //当监听打开时
{
try
{
//存储获取的远程消息
byte[] Data = UDP_Server.Receive(ref ServerEndPoint);
if (DataArrival != null)
{
//调用DataArrival事件
DataArrival(Data, ServerEndPoint.Address, ServerEndPoint.Port);
}
Thread.Sleep(0);
}
catch { }
}
}
private void CallBackMethod(IAsyncResult ar)
{
//从异步状态ar.AsyncState中,获取委托对象
DataArrivalEventHandler dn = (DataArrivalEventHandler)ar.AsyncState;
//一定要EndInvoke,否则你的下场很惨
dn.EndInvoke(ar);
}
public void Send(System.Net.IPAddress Host, int Port, byte[] Data)
{
try
{
//用指定的IP地址和端口号初始化Server
IPEndPoint server = new IPEndPoint(Host, Port);
UDP_Server.Send(Data, Data.Length, server); //将消息发送给远程客户端
}
catch (Exception e) //处理异常
{
MessageBox.Show(e.ToString()); //弹出异常信息提示框
}
}
}
这是我用C#写局域网QQ时自定义的UDPSocket控件,客户端和服务器端都插入这个控件,但是客户端发送到服务器端的信息服务器接收不到,为什么?? --------------------编程问答-------------------- 加打印,设置断点锁定问题出自哪里,然后再解决 --------------------编程问答--------------------
你是在同一台机子测的吧,那两个软件的端口要设成不一样的 --------------------编程问答-------------------- 只能说你是没连上服务器! --------------------编程问答-------------------- 我是在一台机子上测的,但客户端和服务器端的端口号是不一样的!
--------------------编程问答--------------------
端口当然不一样!是服务器端没有收到数据报
--------------------编程问答-------------------- 我设置断点调试了,就是到服务器端的DataArrival执行不下去!
我设置断点调试了,就是到服务器端的DataArrival执行不下去!
补充:.NET技术 , C#