下边的代码,只能接收一次,第二次的就不再接受了,不知道在哪里循环监听!~
        private void InitUdp() {
            ip = new IPEndPoint(IPAddress.Any, port);
            client = new UdpClient(ip);
            RequestState rs = new RequestState();
            rs.ip = ip;
            rs.client = client;
            client.BeginReceive(new AsyncCallback(ReqCallback), rs);
        }        private void ReqCallback(IAsyncResult ar) {
            RequestState rs = (RequestState)ar.AsyncState;
            UdpClient client = rs.client;
            IPEndPoint ip = rs.ip;
            rs.buffer = client.EndReceive(ar, ref ip);
            this.Invoke(new MessageDelegate(Message), rs);
        }        private delegate void MessageDelegate(RequestState rs);
        private void Message(RequestState rs) {
            this.tbContent.Text += Encoding.ASCII.GetString(rs.buffer)+"\n";
        }

解决方案 »

  1.   


    while(true)
    {
    //你的接收代码
    最好再加上Thread.Sleep(休眠时间) 防止CPU使用过高
    }
      

  2.   

    while(true)
    {
    //你的接收代码
    最好再加上Thread.Sleep(休眠时间) 防止CPU使用过高
    }就是要这样的代码,但是应该加在哪里呢?我试着加在BeginRecive或者EndRecive都不行!前一个报错说连接池啥的不够使,后一个报只能接收一次,望指点
      

  3.   

    private void InitUdp() {
                ip = new IPEndPoint(IPAddress.Any, port);
                client = new UdpClient(ip);
                RequestState rs = new RequestState();
                rs.ip = ip;
                rs.client = client;
    while(true){
                client.BeginReceive(new AsyncCallback(ReqCallback), rs);
               }
    }
      

  4.   

    UDP是非连接的,没有监听的说法.
    TCP才需要监听.
      

  5.   

    楼上的大哥,改完后报
    “由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。”我觉得还是有问题,while(true)分别试着加在BeginRecive或者EndRecive都不行
      

  6.   

    试试private void InitUdp() {
                
                ip = new IPEndPoint(IPAddress.Any, port);
                client = new UdpClient(ip);
                while(true){
                RequestState rs = new RequestState();
                rs.ip = ip;
                rs.client = client;
                client.BeginReceive(new AsyncCallback(ReqCallback), rs);
                }
            }
      

  7.   

    to :symbol441
    报错
    由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。
      

  8.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;namespace Chat {
        public partial class ChatRoom : Form {        private int port = 8000;
            private UdpClient client;
            private IPEndPoint ip;
            public ChatRoom() {
                InitializeComponent();
                InitUdp();
            }        #region
            private void ChatRoom_FormClosing(object sender, FormClosingEventArgs e) {
                this.Dispose(true);
            }        #region Send Message
            private void SendMessage(string str,IPEndPoint ip) {
                client = new UdpClient();
                client.Connect(ip);
                byte[] sMsg = Encoding.ASCII.GetBytes(str);
                try {
                    client.Send(sMsg, sMsg.Length);
                }
                catch (Exception exp) {
                    throw exp;
                }
                finally {
                    //this.tbContent.Text += str;
                    this.tbMessage.Text = "";
                }
            }
            #endregion        #region Recive
            private void InitUdp() {
                ip = new IPEndPoint(IPAddress.Any, port);
                client = new UdpClient(ip);
                while (true) {
                    RequestState rs = new RequestState();
                    rs.ip = ip;
                    rs.client = client;
                    client.BeginReceive(new AsyncCallback(ReqCallback), rs);
                }
            }        private void ReqCallback(IAsyncResult ar) {
                RequestState rs = (RequestState)ar.AsyncState;
                UdpClient client = rs.client;
                IPEndPoint ip = rs.ip;
                rs.buffer = client.EndReceive(ar, ref ip);
                this.Invoke(new MessageDelegate(Message), rs);
            }        private delegate void MessageDelegate(RequestState rs);
            private void Message(RequestState rs) {
                this.tbContent.Text += "From Server:"+Encoding.ASCII.GetString(rs.buffer)+"\n";
            }
            #endregion        private void btnSend_Click(object sender, EventArgs e) {
                ip = new IPEndPoint(IPAddress.Parse(tbIp.Text), 8000);
                if (!string.IsNullOrEmpty(tbMessage.Text.Trim()))
                    if (!string.IsNullOrEmpty(tbIp.Text.Trim()))
                        SendMessage(tbMessage.Text, ip);
            }        #endregion        private void btnEsc_Click(object sender, EventArgs e) {
                this.Dispose(true);
            }    }
        public class RequestState {
            public RequestState() { }
            public  UdpClient client;
            public IPEndPoint ip;
            public byte[] buffer;
        }
    }
    全部代码都在这里了,好心人帮忙看看