<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    基于TCP/IP協議的C++網絡編程(API函數版)

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    源代碼:http://download.csdn.net/detail/nuptboyzhb/4169959

    基于TCP/IP協議的網絡編程

    定義變量——獲得WINSOCK版本——加載WINSOCK——初始化——創建套接字 ——設置套接字選項——關閉套接字——卸載WINSOCK——釋放所有資源

    整個程序架構分為兩大部分,服務器端客戶端。

    服務器SOCKET程序流程:

    socket()→bind()→listen→accept()→recv()/send()→closesocket()

    客戶端:

    socket→bind()→connect()→send()/recv()→closesocket()

     

    編程舉例:

    約定發送消息的格式為如下結構體:

    typedef struct

    {

             int ID;

             char data[255];

    }TcpMessage;

    應用程序的頭文件如下:

    #include <winsock2.h>

    #pragma comment(lib,"ws2_32")

    #include <stdio.h>

    端口號為:4500

    服務器端:

    1、  初始化:

             WSADATA wsaData;

        WORD sockVersion = MAKEWORD(2, 2);

             if(WSAStartup(sockVersion, &wsaData) != 0)

                       return 0;

    2、  創建套接字:

             SOCKET sListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

             if(sListen == INVALID_SOCKET)

    {

    printf("socket error\n");

    return 0;

    }

    3、  使套接字和本地地址綁定

    // sockaddr_in結構中裝入地址信息

             sockaddr_in sin;

             sin.sin_family = AF_INET;

             sin.sin_port = htons(4500); // htons函數將主機的無符號短整形數轉換成網絡

             //字節順序

             sin.sin_addr.S_un.S_addr = INADDR_ANY;

    if(bind(sListen, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)

             {

                       printf(" bind error \n");

                       closesocket(sListen);

                       return 0;

             }

    4、監聽端口

             if(listen(sListen, 5) == SOCKET_ERROR)

             {

                       printf("listen error\n");

                       closesocket(sListen);

                       return 0;

             }

    5、等待接受連接,(如無連接,一直等待)

    SOCKET sClient;//用于保存accept返回的套接字

    sClient = accept(sListen,0,0);//accept函數調用失敗則繼續等待連接。

    if(sClient == INVALID_SOCKET)

    {

                                printf("accept() error");

             }

    6、用第5步中accept函數返回的套接字進行收發通信

     6.1、接收:(如果沒有接到,會等待!

          TcpMessagerevData;//定義接收消息的結構體變量

          int ret=recv(sClient,(char *)&revData,sizeof(revData),0);

          if(ret>0)//說明,收到字節

          {

             switch (revData.ID)//對不同的ID,可以有不同的反應

    {

       case 1:

       ……..

    case 2:

    ……..

    }

    }

     6.2、發送:

          TcpMessage sendData;

               memset((char*)&sendData,0,sizeof(sendData));//初始化為0

          sendData.ID=1;//ID成員變量賦值

          strcpy(sendData.data,"\r\n..要發送的字符信息 ");

          if(send(sClient,(char*)&sendData,sizeof(sendData),0)==SOCKET_ERROR)

               {

                       char error[10];

                       int errorcode=WSAGetLastError();

                       itoa(errorcode,error,10);

                       MessageBox(NULL,error,"發送失敗,錯誤碼為:",MB_OK);

                       printf("send error!");

               }

    7、關閉

             closesocket(sClient);//accept生成的套接字

             closesocket(sListen);//服務端套接字

             WSACleanup();

    客戶端

    1、   初始化

    WSADATA wsaData;

    WORD sockVersion = MAKEWORD(2, 2);

           if(WSAStartup(sockVersion, &wsaData) != 0)

                            return 0;

    2、   創建套接字

    SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

              if(sClient == INVALID_SOCKET)

              {

                       printf("socket error\n");

                       return 0;

           }

    3、   使套接字和本地地址綁定

    // sockaddr_in結構中裝入服務器端地址信息

              sockaddr_in servAddr;

              servAddr.sin_family = AF_INET;

              servAddr.sin_port = htons(4500);// htons函數將主機的無符號短整形數轉換成網絡

              //字節順序,4500端口為要連接服務器端的端口

           servAddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");//服務器端ip

    4、   連接服務器

              if(connect(sClient,(sockaddr*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)

              {

                       printf("connect error\n");

                       closesocket(sClient);

                       return 0;

           }

    //注意,要先把服務器打開,否則連接失敗

    5、   收發通信

    sendrecv函數,這一點和服務器端一樣

    6、   關閉

    closesocket(sClient);//客戶端只有一個連接套接字

              WSACleanup();

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全