一个服务器,最多同时有十万个tcp连接,接收的消息有自定义对象和字符串两种。用同步还是用异步合适。开发时应该注意些什么。
    我原来用同步。测试时发现,客户端socket.connect()连上服务器后,点button按钮执行socket.send()没问题,但是如果客户端点button按钮执行for(int i=0;i<10;i++){socket.send()}循环发送的话,服务器接收时就只接受到两条,服务器收到的第2条消息,是客户端发的第2-10条的内容的混合。
   为什么会出现这个问题。如果改用异步,会不会能避免这种问题。
   请教有经验的大牛,小弟初接触开发,希望得到指教。

解决方案 »

  1.   

    public void listen()
    {
    socket.Listen(50);
    //监听到一个socket连接后,给它单独起一个线程。
    Thread thread=new Thread(new ThreadStart(accpet));
    thread.Start();
    } private void accpet( )
    {
    try
    {
    while(run)
    {
    acceptsocket=socket.Accept(); Thread Tcps=new Thread(new ThreadStar(receive));
                                         Tcps.Start();
    }
    }
    catch(Exception ex)
    {
    }
    } public void receive()
    {
    ...
    while(run)
    {
    try
    {
    byte[] buffers=new byte[2048];
    ...
    acceptsocket.Receive(buffers);
                                                 ...这是原来写的服务器端代码
      

  2.   

    用异步,不要搞什么线程。在异步上用线程是画蛇添足。
    至于第二个问题,那是TCP的“粘包”现象,同步和异步都会出现这样的情况,还有一种情况是一个包被分成两个或更多个包被发送,这些都是在实际编程中要注意并处理的!