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

📄 netdatarecvthread.cpp

📁 自己做的一个基于arm7+linux的条码终端系统的源代码
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <Winsock2.h>
#include "ScanSys.h"
#include "CommandID.h"
#include "TypeDefine.h"
#pragma hdrstop
#include <Winsock2.h>
#include "NetDataRecvThread.h"
#include "DispControl.h"
#include "BackLightSet.h"
#include "SerialSet.h"
#include "NetSet.h"
#include "SignalControl.h"
#include "TimeSet.h"
#pragma package(smart_init)
#pragma pack(1)
//---------------------------------------------------------------------------
ClientIDInfo CliIDInfo[512];
void  RecvDataProcess(char *NetRecvData, struct sockaddr_in Recv_IP_Addr);
bool  ClientRegister(struct sockaddr_in Regi_IP_Addr);
bool  ClientHaveRegistered(struct sockaddr_in Regi_IP_Addr);
//---------------------------------------------------------------------------

__fastcall TNetDataRecv::TNetDataRecv(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TNetDataRecv::Execute()
{
    SOCKET ServerRecvSocket;
    WSADATA wsaData;
    int iErrorCode;
    int serverfd;
    struct sockaddr_in Server_IP_Addr;
    struct sockaddr_in Client_IP_Addr;
    int recv_data_len = 0;
    int recv_len = sizeof(Client_IP_Addr);
    char recv_data[256];
    
    if (WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL
    { 
         ShowMessage(AnsiString("网络初始化失败!\n"));
         WSACleanup();
         return;
    }
    else
    {

    }
    
    Server_IP_Addr.sin_family = AF_INET;
    /*所有网络信息都通过此端口接收*/
    Server_IP_Addr.sin_port=htons(SERVER_DATA_RECV_PORT); //监听总端口
    //Server_IP_Addr.sin_addr.s_addr=inet_addr("192.168.0.2"); ///本机
    Server_IP_Addr.sin_addr.s_addr = htonl(INADDR_ANY);
    ServerRecvSocket = socket(AF_INET, SOCK_DGRAM, 0);
    
    if (bind(ServerRecvSocket, (struct sockaddr*)&Server_IP_Addr, sizeof(Server_IP_Addr)) < 0)
    {
        ShowMessage(AnsiString("接收网络初始化失败!\n"));
        WSACleanup();
        closesocket(ServerRecvSocket);
        return;
    }
    else
    {

    }

    while (1)
    {
       for (int i = 0; i < 256; i++)
       {
           recv_data[i] = '\0';
       }
       // Form2->Label1->Caption= Client_IP_Addr.sin_addr.s_addr;
       recv_data_len = recvfrom(ServerRecvSocket,recv_data,256,0,(struct sockaddr*)&Client_IP_Addr,&recv_len);

       if (recv_data_len < 0)
       {
          // Form2->Label1->Caption= recv_data_len;
       }
       else
       {
         // Form2->Label2->Caption= recv_data_len;
          RecvDataProcess(recv_data, Client_IP_Addr);
       }
    }
}

void  RecvDataProcess(char *NetRecvData, struct sockaddr_in Recv_IP_Addr)
{
   ComRequestHeader *head;

   head = (ComRequestHeader *)NetRecvData;

   if (head)
   {
      switch (head->reqType)
      {
         case BEAT_CMMD_ID:
              for (int i = 0; i < ClientNum; i++)
              {
                  if (CliIDInfo[ClientNum].ClientIP == Recv_IP_Addr.sin_addr.s_addr)
                  {
                      CliIDInfo[ClientNum].OnLineTime = 0;
                  }
              }
              break;

         case REGISTER_REQ_CMMD_ID:
              if (!ClientHaveRegistered(Recv_IP_Addr))
              {
                  if (ClientRegister(Recv_IP_Addr))
                  {
                     CliIDInfo[ClientNum].ClientIP = Recv_IP_Addr.sin_addr.s_addr;
                     CliIDInfo[ClientNum].CliID = ClientID;
                     CliIDInfo[ClientNum].OnLineTime = 0;
                     ClientNum++;
                     ClientList->Add(ClientID);
                     Form2->IDListBox->Items->AddStrings(ClientList);
                  }
                  else
                  {
                     ShowMessage(AnsiString("客户端注册失败!\n"));
                  }
              }
              else
              {
                  
              }
              break;

         case SERVER_CLOSE_CMMD_ID:

              break;

         case GET_COM_ATTR_CMMD_ID:
              
              break;

         case GET_NET_ATTR_CMMD_ID:
              
              break;

         case GET_IO_CMMD_ID:
              
              break;

         default:
              break;
      }
   }


}
//---------------------------------------------------------------------------
bool  ClientRegister(struct sockaddr_in Regi_IP_Addr)
{
    SOCKET ServerSocket;
    WSADATA wsaData;
    int iErrorCode;
    __u8 type =   REGISTER_REQ_CMMD_ID;
    struct sockaddr_in Server_IP_Addr;
    ComRespHeader RegisterResp;

    if (WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL
    { 
         ShowMessage(AnsiString("注册网络初始化失败!\n"));
         WSACleanup();
         return false;
    }
    else
    {

    }

    ClientID++;

    Server_IP_Addr.sin_family = AF_INET;
    Server_IP_Addr.sin_port=htons(SERVER_BEAT_SEND_PORT); //监听总端口
   // Server_IP_Addr.sin_addr.s_addr=inet_addr("192.168.0.2"); ///本机
    Server_IP_Addr.sin_addr.s_addr = htonl(INADDR_ANY);
    
    ServerSocket = socket(AF_INET, SOCK_DGRAM, 0);

    //bind(ServerSocket, (struct sockaddr*)&Server_IP_Addr, sizeof(Server_IP_Addr));

    sendto(ServerSocket, (char *)&type, sizeof(__u8), 0,(struct sockaddr *)&Regi_IP_Addr,sizeof(struct sockaddr));
    sendto(ServerSocket, (char *)&ClientID, sizeof(__u32), 0,(struct sockaddr *)&Regi_IP_Addr,sizeof(struct sockaddr));
    closesocket(ServerSocket);

    return true;
}

bool  ClientHaveRegistered(struct sockaddr_in Regi_IP_Addr)
{
   for (int i = 0; i < ClientNum; i++)
   {
      if (Regi_IP_Addr.sin_addr.S_un.S_addr == CliIDInfo[i].ClientIP)
      {
         SOCKET ServerSocket;
         WSADATA wsaData;
         int iErrorCode;
         __u8 type =   REGISTER_REQ_CMMD_ID;
         struct sockaddr_in Server_IP_Addr;

         if (WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL
         {
            ShowMessage(AnsiString("注册网络初始化失败!\n"));
            WSACleanup();
            return false;
         }
         else
         {

         }

         Server_IP_Addr.sin_family = AF_INET;
         Server_IP_Addr.sin_port=htons(SERVER_BEAT_SEND_PORT); //监听总端口
         //Server_IP_Addr.sin_addr.s_addr=inet_addr("192.168.0.2"); ///本机
         Server_IP_Addr.sin_addr.s_addr = htonl(INADDR_ANY);
    
         ServerSocket = socket(AF_INET, SOCK_DGRAM, 0);

        // bind(ServerSocket, (struct sockaddr*)&Server_IP_Addr, sizeof(Server_IP_Addr));
         sendto(ServerSocket, (char *)&type, sizeof(__u8), 0,(struct sockaddr *)&Regi_IP_Addr,sizeof(struct sockaddr));
         sendto(ServerSocket, (char *)&CliIDInfo[i].CliID, sizeof(__u32), 0,(struct sockaddr *)&Regi_IP_Addr,sizeof(struct sockaddr));
          closesocket(ServerSocket);
          return true;
      }
   }

   return false;
}

⌨️ 快捷键说明

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