Сокет и ассоциативный массив

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 27 Feb 2009.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Пытаюсь сохранять полученный дескриптор сокета в ассоциативный массив а потом извлекать его оттуда.Только вот ничего не получается :(
    Code:
    #include <map>
    #include <winsock2.h>
    #include <stdio.h>
    #include <windows.h>
    #include <conio.h>
    #include <string>
    using namespace std;
    map <string,SOCKET> sbox;
    DWORD WINAPI server(LPVOID lParam)
    {
    char ip[17];
    SOCKET sin,sout;WSADATA wsd;
    SOCKADDR_IN ladr,cadr;
    WSAStartup(MAKEWORD(2,0),&wsd);
    ladr.sin_family=AF_INET;
    ladr.sin_port=htons(250);
    ladr.sin_addr.s_addr=0;
    sin=socket(AF_INET,SOCK_STREAM,0);
    bind(sin,(sockaddr*)&ladr,sizeof(ladr));
    //HANDLE mut=CreateMutex(NULL,false,"mymut");
    for(;;)
    {
    listen(sin,10);
    int sz=sizeof(cadr);
    sout=accept(sin,(sockaddr*)&cadr,&sz);
    Sleep(100);
    getpeername(sout,(sockaddr*)&cadr,&sz);
    wsprintf(ip,"%s",inet_ntoa(((SOCKADDR_IN *)&cadr)->sin_addr));
    //WaitForSingleObject(mut,INFINITE);
    sbox[string(ip)]=sout;
    //ReleaseMutex(mut);
    }
    }
    int main() //client connect here
    {
    DWORD id;SOCKET test;
    char *buf=new char[1024*1024];
    CreateThread(0,0,&server,0,0,&id);
    getch();
    test=sbox["127.0.0.1"];
    for(;;)
    {
    recv(test,buf,1024*1024,0);
    Sleep(500);
    send(test,buf,strlen(buf),0);
    }
    }
    
    Подскажите что не так?