C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[37539] 이 소스한번 봐주시겠어요..^^
뽀리 [] 1120 읽음    2004-10-08 14:56
ADO를 연결해서 DB에서 몇개의 int값을 불러서 ... 소켓으로UDP통신으로  BroadCasting하는 소스인데요...구조체로

Send했는데 문제가 있는지...고수님들이 좀 봐주셧음 해서요...BufferSend가 아닌 구조체 ...라서 ..지식도 짧구해서염..

시간내서 좀 봐주셧음 감사하겠습니다...틀린데두 팍팍 찍어주시구염...

typedef struct _UDPDATA
{
BYTE MACHINE_ID;                        //소켓으로 날릴 데이터   define
BYTE RUNSTATE;
int  PRODCOUNT;
BYTE MACHINESTATE;
BYTE ONLINESTATE;
BYTE CYCLETIME;
}UDPDATA;



void __fastcall TForm3::Timer2Timer(TObject *Sender)   //일정시간마다 UDP패킷을 구조체로 보내려고...0.2초
{
int            Count;

    ADOQuery1->Active=true;
    ADOQuery1->First();
    Count = ADOQuery1->RowsAffected;

struct _UDPDATA  *UDPDATA1= new struct _UDPDATA[Count];
struct TMachineData *MachineData = new struct TMachineData[Count];

if (Count !=0)
   {
    for(int i=0; i<Count ; i++)
       {
       MachineData[i].Machine_No =  ADOQuery1->FieldByName("Machine_No")->AsInteger;   //Byte change
       MachineData[i].Run_State = ADOQuery1->FieldByName("RunState")->AsInteger;       //Byte change
       MachineData[i].Curr_Count =ADOQuery1->FieldByName("CurrProdCount")->AsInteger;
       MachineData[i].Machine_State = ADOQuery1->FieldByName("MachineState")->AsInteger;//Byte change
       MachineData[i].CycleTime =ADOQuery1->FieldByName("CycleTime")->AsInteger;        //Byte change
       MachineData[i].OnLineState =ADOQuery1->FieldByName("OnlineState")->AsInteger;    //Byte change
       }
    for(int i=0; i<Count; i++)
       {
        UDPDATA1[i].MACHINE_ID   =  ByteChange(MachineData[i].Machine_No);              //Byte
        UDPDATA1[i].RUNSTATE     =  ByteChange(MachineData[i].Run_State);               //Byte
        UDPDATA1[i].PRODCOUNT    =  MachineData[i].Curr_Count;                          //Int
        UDPDATA1[i].MACHINESTATE =  ByteChange(MachineData[i].Machine_State);           //Byte
        UDPDATA1[i].CYCLETIME    =  ByteChange(MachineData[i].CycleTime);               //Byte
        UDPDATA1[i].RUNSTATE     =  ByteChange(MachineData[i].Run_State);               //Byte
        }
    }
   char *m_SendBuffer = (char*)UDPDATA1;


   int                  err_check;
   int                  send_sock;                            // Send소켓 에러 확인용
   int                  retval=0;                             // Send Byte Buf (int)
   int                  sockfd;                               // Send Socket
   int                  SockOpt_ErorrCheck;
   unsigned long        conv;                                 // USER IP 에러확인
   char                 *addr1;                               // Send Address 주소
   struct               sockaddr_in  seraddr;                 // Send Address의 구조체

   DWORD        sockver = MAKEWORD(2, 2);
   WSADATA      sockdata;
   err_check =  WSAStartup(sockver, &sockdata);               // Load Win Sock 2.2 Dll

        if (err_check)
        {

        WSACleanup();
        return ;
        }

        sockfd=socket(AF_INET, SOCK_DGRAM,  0);              //UDP WinSock 소켓 생성

        if(sockfd == INVALID_SOCKET)                         // if Socket에러라면..
        {
         ShowMessage("The application create Fail. Try again");
         return ;
        }

        memset(&seraddr , 0 , sizeof(seraddr));              //구조체 초기화..
        seraddr.sin_family=AF_INET;                          // Protocol Type
        seraddr.sin_port=htons(9099);                        // Host to network - Send Port

        if(CheckBox1->Checked)
          {
          addr1="192.168.0.255";                             // Default  IP
          seraddr.sin_addr.S_un.S_addr=inet_addr(addr1);     // INADDR_BROADCAST = 0xffffffff
          }

        if(!CheckBox1->Checked)
         {
              if(conv== INADDR_NONE || Edit1->Text=="")      // USER IP
                {
                ShowMessage("허용되지 않거나 알수 없는 IP주소 입니다.다시 입력하여 주십시오");
                closesocket(sockfd);
                return;
                }
         seraddr.sin_addr.S_un.S_addr=inet_addr(Edit1->Text.c_str());
         }

        BOOL opt = TRUE;                                     // Socket Option
        SockOpt_ErorrCheck = setsockopt (sockfd, SOL_SOCKET, SO_BROADCAST,(char FAR *)&opt,sizeof(BOOL));

        if(SockOpt_ErorrCheck)
        ShowMessage("Setsockopt () Error");
                                                             // Sending.........Buf
        retval=sendto(sockfd, (const char*)m_SendBuffer, sizeof(m_SendBuffer) ,0,(struct sockaddr *)&seraddr, sizeof(seraddr));  // Broadcasting....SendBufData

        if(retval ==SOCKET_ERROR)
        {
         ShowMessage("SendBuffer Error");
         return;
        }

        closesocket(sockfd);

delete [] MachineData;
delete [] UDPDATA1;

}



이렇게 하면..UDPDATA안에 있는 구조체 데이터가 잘날라갈지 궁금해서염...문제가 잇을꼬 같아서염...

+ -

관련 글 리스트
37539 이 소스한번 봐주시겠어요..^^ 뽀리 1120 2004/10/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.