哪位大神帮帮忙啊!急!!!!!!!!!!

nishuihanllj 2013-06-26 05:40:29
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控件,客户端和服务器端都插入这个控件,但是客户端发送到服务器端的信息服务器接收不到,为什么??
...全文
124 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nishuihanllj 2013-06-26
  • 打赏
  • 举报
回复
我设置断点调试了,就是到服务器端的DataArrival执行不下去!
引用 1 楼 AAA123524457 的回复:
加打印,设置断点锁定问题出自哪里,然后再解决
我设置断点调试了,就是到服务器端的DataArrival执行不下去!
nishuihanllj 2013-06-26
  • 打赏
  • 举报
回复
引用 2 楼 wyd1520 的回复:
你是在同一台机子测的吧,那两个软件的端口要设成不一样的
端口当然不一样!是服务器端没有收到数据报
nishuihanllj 2013-06-26
  • 打赏
  • 举报
回复
我是在一台机子上测的,但客户端和服务器端的端口号是不一样的!
Regan-lin 2013-06-26
  • 打赏
  • 举报
回复
只能说你是没连上服务器!
本拉灯 2013-06-26
  • 打赏
  • 举报
回复
你是在同一台机子测的吧,那两个软件的端口要设成不一样的
啊拉丁的鱼 2013-06-26
  • 打赏
  • 举报
回复
加打印,设置断点锁定问题出自哪里,然后再解决

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧