как установить соединение через сокеты irDA?

В нашем исследовании сетевого программирования мы начали с программирования irDA, поэтому у меня есть два адаптера irDA «USB-инфракрасный адаптер Kingsun KS-959» и два старых компьютера под управлением Windows XP SP2.

Я правильно установил адаптеры на обеих машинах.

Я хотел создать сервер / клиент в irDA. Вот пример irServer irClient:

// irServer:

#define BACKLOG 2
WORD    wVersion = MAKEWORD(2, 2);
WSADATA wSaData;

if(WSAStartup(wVersion, &wSaData))
return -1;

int irSockServ = socket(AF_IRDA, SOCK_STREAM, 0);

if(SOCKET_ERROR == irSockServ)
DieWithError(WSAGetLastError());

SOCKADDR_IRDA sa_irda_serv = {AF_IRDA, 0, 0, 0, 0,
"irDA:irCOMM"};
if(SOCKET_ERROR == bind(irSockServ, (SOCKADDR*)&sa_irda_serv, sizeof(sa_irda_serv)))
DieWithError(WSAGetLastError());
if(SOCKET_ERROR == listen(irSockServ, BACKLOG))
DieWithError(WSAGetLastError());

SOCKADDR_IRDA sa_irda_clnt;
int sa_irda_clnt_len = sizeof(sa_irda_clnt);
int irSockClnt = accept(irSockServ, (SOCKADDR*)&sa_irda_clnt, &sa_irda_clnt_len);

if(SOCKET_ERROR == irSockClnt)
DieWithError(WSAGetLastError());
else
cout << "Client! Connected" << std::endl;

и вот образец irClient:

WORD    wVersion = MAKEWORD(2, 2);
WSADATA wSaData;

if(WSAStartup(wVersion, &wSaData))
return -1;

int irSockClnt = socket(AF_IRDA, SOCK_STREAM, 0);

if(SOCKET_ERROR == irSockClnt)
DieWithError(WSAGetLastError());

DEVICELIST DevLst;
int DevLstLen = sizeof(DEVICELIST);

while(1)
{
Sleep(1000);
DevLst.numDevice = 0;

// enumerating in range irDA devices
if(SOCKET_ERROR == getsockopt(irSockClnt, SOL_IRLMP,
IRLMP_ENUMDEVICES, (char*)&DevLst, &DevLstLen))
DieWithError(WSAGetLastError());
if(DevLst.numDevice)
{
cout << "Device Name: " << DevLst.Device[0].irdaDeviceName << endl;

SOCKADDR_IRDA sa_irda_serv;
sa_irda_serv.irdaAddressFamily = AF_IRDA;
strcpy(sa_irda_serv.irdaServiceName, "irDA:irCOMM");
memcpy(&sa_irda_serv.irdaDeviceID[0], &DevLst.Device[0].irdaDeviceID[0], 4);

// the problem is here it still stuck and won't connect!??
if(SOCKET_ERROR == connect(irSockClnt, (SOCKADDR*)&sa_irda_serv, sizeof(sa_irda_serv)))
DieWithError(WSAGetLastError());
}
}

У меня все работает до выдачи соединения так connect все еще застрял и, следовательно, соединение не установлено.

Я ценю любого короля помощи

0

Решение

В реализации сервера разместитеaccept() в while(1) петля.

Вам не нужно ждать в while(1) петля для connect() в клиент реализация.

сервер

while(1) {
...
accept(...);
Sleep(Number_of_miliseconds);//You are using win32 imp, for POSIX sleep() this will be in seconds
...
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]