解决方案 »

  1.   

    Blocking指的是阻塞,非阻塞,并不是同步异步
    建议还是查MSDN恶补一下
    你把它设置为阻塞,然后又使用异步方式,当然是不行的
      

  2.   


    设置为阻塞,用同步方式不行么?
    你的代码是异步方式啊
    还是系统的了解一下什么是同步方式,什么是异步方式吧
    并不是你把socket设置为阻塞模式,它就是同步方式了
      

  3.   


    设置为阻塞,用同步方式不行么?
    你的代码是异步方式啊
    还是系统的了解一下什么是同步方式,什么是异步方式吧
    并不是你把socket设置为阻塞模式,它就是同步方式了嗯,代码写的是异步方式,运行没问题的情况;然后“改成用同步方式来Receive()侦听接收
    我用socket.Receive()阻塞的同步方式来接收数据,没有任何数据?
      

  4.   


    不好意思重新又写了遍代码,同步方式又能侦听数据了
    public partial class Form1 : Form
        {
            private Socket socket;        public Form1()
            {
                InitializeComponent();            socket = new Socket(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.IP);
                socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.142"),0));
            }        private void Run()
            {
                byte[] data = new byte[4096];
                int recv;            while (true)
                {
                    try
                    {
                        recv = socket.Receive(data,SocketFlags.None);
                        for (int i = 0; i < recv; i++)
                        {
                            ShowString(string.Format("{0:X2} ",data[i]));
                        }
                        ShowString("\r\n");
                    }
                    catch (SocketException ex)
                    {
                        MessageBox.Show("Receive Thread Exception:\r\n"+ex.Message.ToString());
                        break;
                    }
                }
            }        private void Form1_Load(object sender, EventArgs e)
            {
                new Thread(Run).Start();
            }        private void ShowString(string msg)
            {
                if (richTextBox1.IsDisposed)
                    return;
                richTextBox1.AppendText(msg);
            }
        }