小弟用C#做的Socket客户端,连接上服务器后,首先向服务器发一个设置命令,服务器收到设置命令后就根据客户的请求定时地向客户端返回信息。问题就是我的客户端用怎样的代码来接收服务器定时传回的数据。并且不能阻塞客户程序,因为客户端还要同时作其他工作。请教C#的Socke高手????

解决方案 »

  1.   

    我考虑的也是新建一个线程来接收。While(true)
    {
        Thread.Sleep(100);
        if(ClientSocket.Available > 0)
        {
            byte[] headerbyte = new byte[ClientSocket.Available] 
            ClientSocket.Receive(headerbyte);
         }
    }
      

  2.   

    数据查询,修改之类的工作也用同一个socket?
      

  3.   

    private BinaryReader br = null;
    private NetworkStream ns = null;ns = TcpClient.GetStream();
    br = new BinaryStream(ns);private void Listening()//线程
    {
        while (!exit)
        {
            byte[] buffer = new byte[1024];
            try
            {
                buffer = br.ReadBytes(1024);
            }
            catch (System.IO.IOException)
            {
            }
        }
    }NetworkStream 要是全局的,由它生成的BinaryReader和BinaryWriter要在程序结束时才能Close
    这样你就可以通过一个线程来接收服务器信息而向服务器发送信息则可以在不同的函数中
      

  4.   

    while (true)
    {
        try
        {
            Socket receiver = Connect();
            int byteRec = receiver.Receive(buffer);        if (byteRec > 0)
            {
               .................//Connect Method
    public Socket Connect()
    {
    try
    {
            if (handler == null)
            {
                handler = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                handler.Connect(RemoteEPServer);
            }
            return handler;
    }
    catch (Exception ex)
    {
    Console.WriteLine(ex.ToString());
            return null;
    }
    }
      

  5.   

    步骤: 定义IPhandler = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        handler.Connect(RemoteEPServer);建立byte[]存放接受数据
    用handler.receive 方法/send方法收发数据