PDA

Просмотр полной версии : Сокет и ассоциативный массив


_nic
27.02.2009, 14:34
Пытаюсь сохранять полученный дескриптор сокета в ассоциативный массив а потом извлекать его оттуда.Только вот ничего не получается :(

#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);
}
}

Подскажите что не так?