1. 程式人生 > >基於TCP/IP協議的C++網路程式設計(API函式版)

基於TCP/IP協議的C++網路程式設計(API函式版)

原始碼: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();

相關推薦

基於TCP/IP協議C++網路程式設計API函式

原始碼:http://download.csdn.net/detail/nuptboyzhb/4169959 基於TCP/IP協議的網路程式設計 定義變數——獲得WINSOCK版本——載入WINSOC

基於tcp/ip協議網路程式設計的一點感悟 ---關於ip和port作為通訊一端的唯一標識的認識

      對於基於tcp的應用程式來說,無論是客戶端,還是伺服器端,唯一標識對端id的是socket pair {本地ip:本地port, 遠端ip:遠端port} ,底層的ip協議資料包肯定包含源ip和port,目的ip和port, 當此資料包到達目的地時,目標主機的tc

基於TCP/IP協議的Socket程式設計

如今的大多數網路通訊都是選擇使用基於TCP/IP的協議進行,其中封裝的比較好的當屬socket了,下面就socket的使用進行詳細的描述: 一、Socket的工作模式 在TCP/IP網路應用中,通訊的兩個程序間相互作用的主要模式是客戶/伺服器(C/S)模式,即客戶向伺服器發

浙大C語言程式設計第3》題目集 - 習題11-5 指定位置輸出字串20 分

題目連結:點選開啟連結   題目大意:略。   解題思路:略。   AC 程式碼 char *match( char *s, char ch1, char ch2 ) { char *p=s, *h; int fst=1,

浙大C語言程式設計第3》題目集 - 習題11-7 奇數值結點連結串列20 分

題目連結:點選開啟連結   題目大意:略。   解題思路:題目說刪除了,其實可以轉化為再搞一個獲取奇數時的做法來做偶數的情況,最後把地址賦值給L,這樣思路就簡單許多~。還有這裡帶兩個星號的L,其實多了一個星號是因為傳參時,傳進去的是指標變數的地址(此地址非內容

浙大C語言程式設計第3》題目集函式練習5-1

練習5-1 求m到n之和(10 分) 本題要求實現一個計算m~n(m 函式介面定義: int sum( int m, int n ); 其中m和n是使用者傳入的引數,保證有m < n。

浙大C語言程式設計第3》題目集函式練習5-3

練習5-3 數字金字塔(15 分) 本題要求實現函式輸出n行數字金字塔。 函式介面定義: void pyramid( int n ); 其中n是使用者傳入的引數,為[1, 9]的正整數。

浙大C語言程式設計第3》題目集前四章總結-續

練習4-11 統計素數並求和   (20分) 本題要求統計給定整數MM和NN區間內素數的個數並對它們求和。 輸入格式: 輸入在一行中給出兩個正整數MM和NN(1\le M\le N\le 5001≤M≤N≤500)。 輸出格式: 在一行中順序輸出MM和NN區間內

浙大C語言程式設計第3

2.1.1.2 計算機和程式語言:計算機的思維方式 程式的執行 解釋:藉助一個程式,那個程式能試圖理解你的程式,然後按照你的要求執行。 編譯:藉助一個程式,就像一個翻譯,把你的程式翻譯成計算機真正能懂的語言——機器語言——寫的程式,然後,這個機器語言寫的程

試讀《C#高階程式設計第9》有感

        在寫這篇書評之前,我想先說一下自己。我是一名對日外包程式設計師,自己從事外包工作也已經有八個年頭了。開始接觸軟體開發,我是從學習Java語言入手的,自己從事了外包這一行,才發現自己單純的會一種程式語言是遠遠不夠。當你被公司重視的時候,成為了一名軟體專案的消防

浙大C語言程式設計第3》題目集函式習題5-1

習題5-1 符號函式(10 分) 本題要求實現符號函式sign(x)。 函式介面定義: int sign( int x ); 其中x是使用者傳入的整型引數。符號函式的定義為:若x大於0,

譚浩強C語言程式設計第三部分課後題答案,自己整理的

第一篇部落格,也不知道怎麼寫,就把以前的筆記發上來吧 學了半年後寫的,可能稍顯不規範,或有的多餘,將就看吧,也不想再改了 1.5 #include<stdio.h> void main() {printf("******************\n");pr

c++ 網路程式設計TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <process.h> #include <winsock2.h> #include <win

c++ 網路程式設計TCP/IP LINUX/windows下 多執行緒超詳細教程 以及 多執行緒實現服務端

原文作者:aircraft 原文連結:https://www.cnblogs.com/DOMLX/p/9661012.html  先講Linux下(windows下在後面可以直接跳到後面看): 一.執行緒基本概念 前面我們講過多程序伺服器,但我們知道它開銷很大

簡單的 C++ SOCKET程式設計 ---基於TCP/IP協議(轉)

server端: #include <WINSOCK2.H> #include <stdio.h> #pragma comment(lib,"ws2_32.lib") void main() { //建立套接字 WORD myVersion

如何基於TCP/IP協議進行MFC Socket網路通訊程式設計

MFC Socket網路通訊程式設計        最近因為一個專案需要進行區域網絡通訊,向工作單位的軟體工程師請教了一下需要用到哪些知識,然後博主就自學了一遍windows網路通訊程式設計原理,然後就在網上找了一大堆例子,但實際執行效果並不佳,花了大概一週多的時間總算是把

網路程式設計基於TCP/IP協議簡單伺服器構建

2018.0630********************************************************************** author:wills 網路程式設計入門 計算機網路基礎 計算機網路是獨立自主的

JAVA——點對面通訊Socket基於TCP/IP協議

點對面通訊(Socket基於TCP/IP協議) 1.要求 大多情況下,網路通訊經常需要多個客戶機同一個伺服器進行通訊,如FTP伺服器是同時接收多個客戶訪問的伺服器。本例介紹點對面通訊,即一個伺服器監聽多個客戶端的請求的通訊。 2.原理 建立多客戶連線的Soc

一、基於linux下TCP\IP協議套接字socket初識

在網際網路的世界中,不同的電腦之間需要進行資料交流,那麼他們就需要一個統一的規範,來確定怎麼樣進行交流。根據國際標準化組織ISO定義的標準,網路結構按照不同的功能分為7層,分別是物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層。在TCP/IP協體系中,

基於TCP/IP 協議的簡單C/S程式

http://blog.chinaunix.net/uid-23069658-id-3273673.html http://www.oschina.net/code/snippet_153782_16562