我现在要做一个TCP/IP(多线程)的服务端程序。
需要实现的功能很简单,就是接收数据,处理数据,发送数据。
有大概400左右的客户终端,而同时连接的终端不固定。我现在的做法是:在主线程里接收终端的连接请求,当请求到来时(用了WSAAsyncSelect的FD_ACCEPT)发送一个消息,从而创建一个与连接socket对应的线程。我就在这个线程里对数据接收 处理 发送了......之前发了几个帖子问了相关的问题,但是还是弄不明白所以就按上面的写了。因为我在之前调用了WSAAsyncSelect使套接字变成了非阻塞,我又在线程里把他设置成阻塞,并且无限循环。
当然了垃圾的思路+垃圾的代码,使这个服务器程序运行后,只要有一个连接到来就变的很慢。
别说400个,40个就完蛋了。请大家给予我帮助,说说具体的思路,或给我发个源代码。([email protected]
以前有很多人简单的提示了我一句,比如说:最好用完成端口(要求用多线程的),或给出了一个函数。
但是大家想啊,我一个新人接触VC不到2个月,接触网络编程还不到20天,我又不是天才,怎么可能弄的懂呢。
所以请大家尽量详细的指点指点我,嘿嘿先谢谢大家了。
当然对帮助我的人,我也没什么报答的,就是把我不多的分数拿出来送给你。

解决方案 »

  1.   

    overlap 
    iocp甚至线程池都能胜任
      

  2.   

    我用的是基本Winsock API做的,数据库是SQL Server 2000,全部都用阻塞方式通信..
    发你邮箱了..
      

  3.   

    如果你对C++比较熟悉,可以学习一下boost.asio,用它的异步模式,它在Windows上的实现也是基于IOCP的,但是你不需要了解IOCP的细节。看看它的例子就好了。
      

  4.   

    可以看看Windows网络技术
    TCP/IP协议三卷本
      

  5.   

    如果考虑平台兼容,就用socket好了
    使用线程池平衡连接的终端
      

  6.   

    我想知道的 就是一个对处理这样问题的思想就是类似“我现在的做法是:在主线程里接收终端的连接请求,当请求到来时(用了WSAAsyncSelect的FD_ACCEPT)发送一个消息,从而创建一个与连接socket对应的线程。我就在这个线程里对数据接收 处理 发送了......”
    这样的一段话。希望大家说说 IOCP是个什么原理 线程池又是什么原理如果只能用多线程应该怎么做?   
      

  7.   

    IOCP不是一两句话能解释清楚的,可以参考windows网络编程里的例子线程池不过是为了避免多次重复创建所带来的性能问题,WIN平台下有相关的系统API可以用