1、用CSocket 派生的类,在OnReceirve()中写收到的buf,但服务端发送连续发了10数据,客户端只收到1条,但如果是单步调试的话,就可收到尽量多的数据,我已经做了以下的设置,但还不行,不知道为什么?
int nNetTimeout=1000;//1秒
SetSockOpt(SO_SNDTIMEO,(char *)&nNetTimeout, sizeof(int));
//接收时限
SetSockOpt(SO_RCVTIMEO,(char *)&nNetTimeout, sizeof(int));
int nRecvBuf=32*1024;//设置为32K
SetSockOpt(SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));2、同样,用多线程循环发送数据时,就会报错,CSOCKET是不支持多线程的吗?
int nNetTimeout=1000;//1秒
SetSockOpt(SO_SNDTIMEO,(char *)&nNetTimeout, sizeof(int));
//接收时限
SetSockOpt(SO_RCVTIMEO,(char *)&nNetTimeout, sizeof(int));
int nRecvBuf=32*1024;//设置为32K
SetSockOpt(SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));2、同样,用多线程循环发送数据时,就会报错,CSOCKET是不支持多线程的吗?
解决方案 »
- MFC应用编程
- □里面怎么打√
- 菜鸟请教:关于new和delete的问题,请指点一下!!!
- 严重求助:进程启动时无法进入main函数
- 一个关于系统自动生成的代码的疑问~~~~
- 如何获得本机某个盘符下的所有文件名列表,并按创建时间先后顺序排列?
- 如何在现有的win32DLL中添加MFC函数?
- 各位大侠高手请进来!
- 又一个初级问题:编译error!--------急!
- 但文档问题:怎样在文档类中获得主框架指针?
- com的函数只能返回STDMETHODIMP这个吗?能不能自己定义?
- 问一个百思不得其解的问题啊,我自己的机子写的ado程序,运行一切正常,为什么换到其他的机器上面了,却运行的时候说指针错误呢?很奇怪
2.CSocket在跨线程时有问题,主要原因是CSocket与SOCKET之间的映射是通过一个线程局部存储的MAP来实现的。
这样就可以了。
CMySock *clskt=new CMySock(this);
BOOL b=0;
clskt->SetSockOpt(TCP_NODELAY,&b,sizeof(BOOL),IPPROTO_TCP);
CMySock *)wparam)->Accept(*clskt);
或者PendingSend ,你只要循环调用这辆个函数就行
SOCKET默认并不是一有数据就马上返回让你RECV到的,因为这样效率不高;
大家都说CSOCKET不适合使用多线程;