⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irda-c.cpp

📁 Windows CE下用于红外接口通讯的客户端程序和服务端程序
💻 CPP
字号:
#include <windows.h>
#include <af_irda.h>
#include <stdio.h>

void ErrOut()
{
  LPVOID lpMsgBuf;
  DWORD errCode=GetLastError();
  FormatMessage( 
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM | 
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    errCode,
    MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), // Default language
    (LPTSTR) &lpMsgBuf,
    0,
    NULL);
// Process any inserts in lpMsgBuf.
// ...
// Display the string.
//MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
printf("%sError Code=%d\n",(LPTSTR)lpMsgBuf,errCode);

// Free the buffer.
LocalFree( lpMsgBuf );
}


#define NUMRETYR  5                   // Maximum number of retries

int main()
{
  WSADATA wsaData;
  SOCKET sock;                    // Socket bound to the server
  DEVICELIST devList;             // Device list
  SOCKADDR_IRDA address = {AF_IRDA, 0, 0, 0, 0, "IRServer"};
                                  // Specifies the server socket address
  int iCount = 0,                 // Number of retries
      index = 0,                  // Integer index
      iReturn,                    // Return value of recv function
      iDevListLen = sizeof (devList);
                                  // Size of the device list
  char szClientA[100];            // ASCII string 

  WSAStartup(MAKEWORD(1,1),&wsaData);
  // Create a socket that is bound to the server.
  if ((sock = socket (AF_IRDA, SOCK_STREAM, 0)) == INVALID_SOCKET)
  {
    ErrOut();
    return FALSE;
  }
  
  // Initialize the number of devices to zero.
  devList.numDevice = 0;      

  while ( (devList.numDevice == 0) && (iCount <= NUMRETYR))
  {
    // Retrieve the socket option.
    if (getsockopt (sock, SOL_IRLMP, IRLMP_ENUMDEVICES, 
                    (char *)&devList, &iDevListLen) == SOCKET_ERROR)
    {
      ErrOut();
      closesocket (sock);
      return FALSE;
    }
    
    iCount++;

    // Wait one second before retrying.
    Sleep (1000);          
  }

  if (iCount > NUMRETYR)
  {
    printf("Cannot locate server.\n");
    closesocket (sock);
    return FALSE;
  }

  // Get the server socket address.
  for (index = 0; index <= 3; index++)
  {
    address.irdaDeviceID[index] = devList.Device[0].irdaDeviceID[index];
  }

  // Establish a connection to the socket.
  if (connect (sock, (struct sockaddr *)&address, 
               sizeof (SOCKADDR_IRDA)) == SOCKET_ERROR) 
  {
    ErrOut();
    closesocket (sock);
    return FALSE;
  }

  // Send a string from the client socket to the server socket.
  if (send (sock, "To Server.", strlen ("To Server.") + 1, 0)
           == SOCKET_ERROR) 
  {
    ErrOut();
  }

  // Receive data from the server socket.
  iReturn = recv (sock, szClientA, sizeof (szClientA), 0);

  // Check if there is any data received. If there is, display it.
  if (iReturn == SOCKET_ERROR)
  {
    ErrOut();
  }
  else if (iReturn == 0)
  {
    //MessageBox (NULL, TEXT("Finished receiving data"), TEXT("Client"),MB_OK);
    printf("Finished receiving data\n");
  }
  else
  {
    printf("Received From Server:%s\n",szClientA);
  }

  // Close the socket.
  closesocket (sock);
  WSACleanup();

  return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -