首页
社区
课程
招聘
[求助]VC socket 远程主机强迫关闭了一个现有的连接。。。
发表于: 2010-12-8 15:05 6502

[求助]VC socket 远程主机强迫关闭了一个现有的连接。。。

2010-12-8 15:05
6502
我写了一个 简单的通讯程序 可是数据量多了的还总是会出现

远程主机强迫关闭了一个现有的连接。。。

大家帮我看看。那里写的不好。。可以优化下。

我的目的就是。。。不出现任何的错误。。。出现错误。。。也会 send 返回给我。

程序流程  主程序  - 》 注入DLL 到目标线程   (目标进程可能有 50多个进程以上,每个进程注入一个DLL、主程序然后  SOCKET 通讯)

我大概注入了  50多个线程后。。。可能 TCP太忙了。。。总是会出现  

远程主机强迫关闭了一个现有的连接。。。

关于 MSG_PEEK,数据没有从缓存里面取出来哦。
这个。是这样的。。。我同时可能 上百条线程同时访问。。。
如果不用 MSG_PEEK 的话 在 netstat -an 里面就会看到 N多的未关闭连接。。
用了 MSG_PEEK 就没有了


VOID __cdecl TCPLient(LPVOID dummy) 
{
    int sx_client_port = 42000 + GetCurrentProcessId();//客户端监听端口
    
    //初始化winsock
    WSADATA wsad;    
    WSAStartup(MAKEWORD(1,1),&wsad);


    SOCKET slisten=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
    SOCKET sconnect;

    SOCKADDR_IN sin;   
    sin.sin_family=AF_INET; 
    sin.sin_port=htons(sx_client_port);  
    sin.sin_addr.s_addr=inet_addr("127.0.0.1");  
    bind(slisten,(SOCKADDR*)&sin,sizeof(SOCKADDR)); 

    listen(slisten,10);
    SOCKADDR_IN  c_addr;  
    int addr_len = sizeof(SOCKADDR);
    int timeout=3000;
    
    while(true)   
    {     
        try
        {
            sconnect=accept(slisten,(SOCKADDR*)&c_addr,&addr_len); //通过监听套接字创建连接套接
            setsockopt(sconnect, SOL_SOCKET, SO_SNDTIMEO, (char*)&timeout, 4);//发送时限
            setsockopt(sconnect, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, 4);//接收时限
            
            recv(sconnect,(char*)&msg,sizeof(msg),MSG_PEEK);//接收数据
            
            int returnLength;
            
            char* rc = working(&returnLength);//处理接收的数据
            
            send(sconnect,rc,returnLength,0);//返回数据 
            
            closesocket(sconnect);
        }
        catch(...)
        {
        }
    }
}



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//