2009年6月23日 星期二

工業控制應用設計實務班:使用Visual C++ 程式語言 --上課範例: TCP網路程式

今日課程實做 Windows 上TCP/IP Server&Client 程式,茲分別先將兩支簡易程式貼上,稍後有空再貼上如 Echo Server 類的程式及講解說明。
課程內容尚有  Asynchronous Communication (主要以RS232非同步傳輸為主) 還未實做,這一部份需要 原本RS232傳輸技巧及Thread執行緒配合。


第二梯課程相關網址: http://edu.tcfst.org.tw/query_coursedetail.asp?courseidori=98C072



















































工業控制應用設計實務班:使用Visual C++ 程式語言
第一班6/3已額滿,第二班7/8開班,把握進修會!上過學員一致好評講師,不容錯過!!

98C072

目前電腦技術的進步,使得原本以PLC為主的工控應用系統,已逐漸被PC-Based控制器所取代。PC-Based控制器是以工業電腦主機為基礎,藉其開放性的架構,可因需求來擴充介面板,如此便可將各種可能的應用,以介面卡的方式整合到工業PC的硬體架構中,再運用PC上不斷更新的軟硬體資源,即可降低系統研發的成本及提高資訊處理速度。自強基金會特地因應此一趨勢開設【工業控制應用設計實務班】,以工業PC技術為根基,講授適用於工業控制之運動控制器與程序控制器的程式技巧,讓工業控制應用系統能更具彈性、且易更動設計,並且容易與網路連接,同時可處理多資料量及整合更多的工控介面。

上完此課程,您將獲得:
1. 如何有彈性且精準的運用PC架構來完成工業控制系統
2. 熟悉RS232及TCP/IP 網路傳輸控制技巧
3. 熟悉多執行緒(Multi-Thread)技術
4. 熟悉檔案IO及Asynchronous Input/Output技術
5. 熟悉工業控制程式之例外處理(Exception Handling)機制
6. 熟悉多工程式(Multi-Task)下之Share Memory與Memory Access技術
★課程內容試用於Visual C相關版本

1.C/C++語言重點技術講解
2.Exception Handling例外控制
3.Thread、Scheduling、Synchronization技術介紹
4.IO Input/Output、Asynchronous Input/Output 技術介紹
5.File and Directory Control 技術介紹
6.Memory Access、Memory-Mapped Files (Same as【Share Memory】) 技術介紹
7.Asynchronous Communication 技術介紹:包含 RS232傳輸控制機台
8.Socket網路傳輸技術介紹:包含TCP/UDP傳輸、Client/Server架構
9.整合範例: Multi Thread/Multi Asynchronous Communication and Socket Programming實作

自強基金會 專業顧問 業界師資
★具有開發ARM7(W90N740)、XSCALE PXA270開發板實務之設計經驗。
★教學經驗超過12年以上,也是多家廠商聘請專業顧問
★上過學員一致好評講師!
★具有開發ARM7(W90N740)、XSCALE PXA270開發板實務之設計經驗。
★著作:C&C++完美經典、C&C++完美的演繹、JAVA完美經典、掌握JAVA設計之鑰、Java Phone 完美經典、 DELPHI 6 Object Pascal 完美經典、VISUAL BASIC 6完美經典
參觀江老師blog(內容很多資訊哦!請點此連結!)

7500元

27 小時

7/8~8/19,每週三晚上,18:50~21:50 ,共27小時 

台北分部(台北市金華街 110 號 3 樓)

財團法人自強工業科學基金會

02-33223139分機2282 林小姐 hllin@tcfst.org.tw


TCP/IP Server端程式碼:
/*
 * TCP Server Simple AP for Windows
 * Copyright (C) 2009 Yi-Hua, Chiang
 * microcyh@seed.net.tw
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
int main()
{
  WORD wVersionRequested;
  WSADATA wsaData;
  int err;
  SOCKET srvSocket, toClientSocket;
  struct sockaddr_in serverAddr;
  struct sockaddr_in toClientAddr;


  wVersionRequested = MAKEWORD( 2, 0 );


  err = WSAStartup( wVersionRequested, &wsaData );
  if ( err != 0 )
    return 0;
  if( (srvSocket = socket( AF_INET, SOCK_STREAM,  IPPROTO_TCP ) ) == INVALID_SOCKET )
  {
    printf( "Create socket fail!!\r\n" );
    return 0;
  }
  serverAddr.sin_family = AF_INET;
  serverAddr.sin_port   = htons( 2222 );
  serverAddr.sin_addr.s_addr = inet_addr( "127.0.0.1" );
  if( bind( srvSocket, (struct sockaddr*)&serverAddr , sizeof(serverAddr) ) == 0 )
  {
    if( listen ( srvSocket , 2) == 0 )
    {
      int receLen, toClientAddrLen;  char *ReceBUF = (char *)malloc( 100 );
      toClientAddrLen = sizeof( toClientAddr );
      if( (toClientSocket=accept( srvSocket,(struct sockaddr*)&toClientAddr,
         &toClientAddrLen )) != INVALID_SOCKET  )
      {   // toClientSocket = (struct sockaddr*)&toClientAddr
        memset( ReceBUF, '\0', sizeof(ReceBUF) );
        receLen = recv( toClientSocket, ReceBUF, 100, 0 );
        ReceBUF[ receLen ] = '\0';
        printf( "ReceBUF=%s\r\n" , ReceBUF );
        closesocket( toClientSocket );
      }
      else
       printf( "accept is fail for srvSocket \r\n" );
    }
    else
      printf( "Setup listen is fail\r\n" );
  }
  else
    printf( "Binding the srvSocket to serverAddr is fail\r\n" );
  closesocket(srvSocket);
  WSACleanup();
  return 0;
}


TCP/IP Client端程式碼:
/*
 * TCP Client Simple AP for Windows
 * Copyright (C) 2009 Yi-Hua, Chiang
 * microcyh@seed.net.tw
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
int main()
{
  WORD wVersionRequested;
  WSADATA wsaData;
  int err;
  SOCKET ClientSocket;
  struct sockaddr_in ClientAddr;
  wVersionRequested = MAKEWORD( 2, 0 );
   err = WSAStartup( wVersionRequested, &wsaData );
  if ( err != 0 )
    return 0;
  if( (ClientSocket = socket( AF_INET,  SOCK_STREAM,  IPPROTO_TCP ) ) == INVALID_SOCKET )
  {
    printf( "Create socket fail!!\r\n" );
    return 0;
  }
  ClientAddr.sin_family = AF_INET;
  ClientAddr.sin_port   = htons( 2222 );
  ClientAddr.sin_addr.s_addr = inet_addr( "127.0.0.1" );
  if( connect(ClientSocket,(struct sockaddr*)&ClientAddr, sizeof(ClientAddr) ) == 0 )
  {
    int sendLen;
    char *sendStr = (char *)malloc( 15 );
    memset( sendStr, '\0', sizeof(sendStr) );
    strcpy( sendStr, "Hello TCFST\r\n" );
    printf( "sendStr=%s\r\n", sendStr );
    sendLen = send( ClientSocket, sendStr , strlen(sendStr) , 0  );
  }
  else
    printf( "connect to srvSocket is fail\r\n" );
  closesocket(ClientSocket);
  WSACleanup();
  return 0;
}


 


沒有留言:

張貼留言

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...