Socket s=  serverSocket.Accept();
 s.BeginReceive(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(Receive), null);    public void Receive(IAsyncResult asyn) //异步接收
       {
            serverSocket.EndReceive(asyn);
            Socket client = (Socket)asyn.AsyncState;
            client.BeginReceive(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(Receive), null); 
            textBox1.Text = LAN.byttostr(msg);
        }
这样写有什么错误吗?最近在写一个局域网的聊天器,不明白socket (异步)的原理,目前就像实现一个服务器给客户端发送消息,然后客户端也可以向服务器发送消息的程序,但看了很多网上代码都得不到想要的效果,希望各位可以帮助我~!~!(能有实例代码是最好啦~!~!)

解决方案 »

  1.   

    C# Socket异步通讯客户端实现源码C# Socket异步通讯客户端之主程序:public static int Main(String[] args)  {   IPAddress ipAddress = IPAddress.Parse("192.168.1.104");  int port = 20000;  IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);   // 生成一个TCP/IP socket.  Socket client = new Socket(AddressFamily.InterNetwork,  SocketType.Stream, ProtocolType.Tcp);   // 与目标终端连接.  client.BeginConnect(remoteEP,  new AsyncCallback(ConnectCallback), client);  //等待,直到连接程序完成。在ConnectCallback中适当位置有connecDone.Set()语句  connectDone.WaitOne();   // 发送数据到远程终端.  Send(client, "This is a test<EOF>");  sendDone.WaitOne();   // 接收返回数据.  Receive(client);  receiveDone.WaitOne();   // Write the response to the console.  Console.WriteLine("Response received : {0}", response);   // Release the socket.  client.Shutdown(SocketShutdown.Both);  client.Close();   return 0;   } C# Socket异步通讯客户端之连接部分Callback:private static void ConnectCallback(IAsyncResult ar)  {   // 从state对象获取socket.  Socket client = (Socket)ar.AsyncState;   // 完成连接.  client.EndConnect(ar);   Console.WriteLine("Socket connected to {0}",  client.RemoteEndPoint.ToString());   // 连接已完成,主线程继续.  connectDone.Set();  } C# Socket异步通讯客户端之数据接收:   private static void Receive(Socket client)  {   // 构造容器state.  StateObject state = new StateObject();  state.workSocket = client;   // 从远程目标接收数据.  client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,  new AsyncCallback(ReceiveCallback), state);      }   private static void ReceiveCallback(IAsyncResult ar)  {   // 从输入参数异步state对象中获取state和socket对象  StateObject state = (StateObject)ar.AsyncState;  Socket client = state.workSocket;   //从远程设备读取数据  int bytesRead = client.EndReceive(ar);   if (bytesRead > 0)  {  // 有数据,存储.  state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead));   // 继续读取.  client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,  new AsyncCallback(ReceiveCallback), state);  }  else {  // 所有数据读取完毕.  if (state.sb.Length > 1)  {  response = state.sb.ToString();  }  // 所有数据读取完毕的指示信号.  receiveDone.Set();  }   } C# Socket异步通讯客户端之发送数据:private static void Send(Socket client, String data)  {  // 格式转换.  byte[] byteData = Encoding.ASCII.GetBytes(data);   // 开始发送数据到远程设备.  client.BeginSend(byteData, 0, byteData.Length, 0,  new AsyncCallback(SendCallback), client);  }   private static void SendCallback(IAsyncResult ar)  {   // 从state对象中获取socket  Socket client = (Socket)ar.AsyncState;   // 完成数据发送.  int bytesSent = client.EndSend(ar);  Console.WriteLine("Sent {0} bytes to server.", bytesSent);   // 指示数据已经发送完成,主线程继续.  sendDone.Set();   } C# Socket异步通讯客户端的实现源码内容就基本向你介绍到这里,希望对你了解和学习C# Socket异步通讯有所帮助。
      

  2.   

    没有转贴好,看下面的链接吧http://developer.51cto.com/art/200908/145345.htm
      

  3.   


    public void Receive(IAsyncResult asyn) //异步接收
      {
      serverSocket.EndReceive(asyn);
      Socket client = (Socket)asyn.AsyncState;
      client.BeginReceive(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(Receive), null);  
      textBox1.Text = LAN.byttostr(msg);//这句有问题
      }
      

  4.   

    s.BeginReceive(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(Receive), null);  将null改成sclient.BeginReceive(msg, 0, msg.Length, SocketFlags.None, new AsyncCallback(Receive), null);这里的null改成client试试