回 帖 发 新 帖 刷新版面

主题:求C#的UDP通信的源码程序

很急阿 谁有能告诉我阿?
我的Email:ling19841215@163.com

下面是我写的一个程序的一部分,帮我看看哪里不对

private IPAddress hostIP,remoteIP;
private IPEndPoint hostPoint,remotePoint;
private UdpClient uc;
int port;

private void btnSend_Click(object sender, System.EventArgs e)
{
    if(uc==null)
    {
        hostIP=IPAddress.Parse(txtHostIP.Text);
        remoteIP=IPAddress.Parse(txtRemoteIP.Text);
        port=Convert.ToInt32(txtPort.Text);
        hostPoint=new IPEndPoint(hostIP,port);
        remotePoint=new IPEndPoint(remoteIP,port);
        uc=new UdpClient(hostPoint);
    }
    string strSend =rtbSend.Text;
    byte[] byteSend = Encoding.BigEndianUnicode.GetBytes(strSend);
    uc.Send(byteSend,byteSend.Length,remotePoint);

}

private void btnStart_Click(object sender, System.EventArgs e)
{
    if(uc==null)
    {
        hostIP=IPAddress.Parse(txtHostIP.Text);
        remoteIP=IPAddress.Parse(txtRemoteIP.Text);
        port=Convert.ToInt32(txtPort.Text);
        hostPoint=new IPEndPoint(hostIP,port);
        remotePoint=new IPEndPoint(remoteIP,port);
        uc=new UdpClient(hostPoint);
    }
    Thread myThread=new Thread(new ThreadStart(run));
    myThread.Start();
}
private void run()
{
    while(true)
    {
        byte[] byteReceive=uc.Receive(ref remotePoint);
        string strReceive=Encoding.BigEndianUnicode.GetString(byteReceive);
        rtbReceive.AppendText(strReceive+"\r\n");
    }
}

回复列表 (共1个回复)

沙发


Start按钮事件把uc定义了一个进行UDP监听的实例,并启动了一个线程对uc上的数据进行接收,这部分没有错,
但是Send按钮事件中就怪了,你为什么要
uc=new UdpClient(hostPoint)?
这个操作肯定会造成
byte[] byteReceive=uc.Receive(ref remotePoint);
这条语句出错.
除非你在Send按钮事件中添加一句:
btnStart.Endable= false;
在Start按钮事件中添加一句:
btnSend..Endable= false;
这样,你这个程序在发送数据时就不能进行接收了;
接收时就不能进行发送了.
如果又要接收又要发送,你需要定义2个UDPClient;一个用于向指定地址发送数据,一个监听接收数据,
或者在Send事件中不要把uc再new一遍,直接这样:

remoteIP=IPAddress.Parse(txtRemoteIP.Text);
port=Convert.ToInt32(txtPort.Text);
remotePoint=new IPEndPoint(remoteIP,port);

if(uc != null)
{
    string strSend =rtbSend.Text;
    byte[] byteSend = Encoding.BigEndianUnicode.GetBytes(strSend);
    uc.Send(byteSend,byteSend.Length,remotePoint);
}
else
{
   uc = new UDPClient();
   uc.Send(byteSend,byteSend.Length,remotePoint);
   btnStart.Enable = false;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册