1. 程式人生 > >VC++ socket程式設計例項

VC++ socket程式設計例項

1.        兩天計算機通訊需要協議,通訊的兩臺計算機IP必須唯一

2.        同一個計算機可以進行多個應用程式與其他計算機通訊,IP地址唯一,而埠號是區別同一計算機(同一IP)的唯一標示。

3.        實際上就類似於一個辦公室的總機號碼(IP)和分機號碼(埠號)

4.        協議:為了進行網路中的資料交換(通訊)而建立的規則、標準或約定

5.        協議=語義+語法+規則

6.        不同層具有各自不同的協議

7.        上層使用下層提供的服務,實際通訊在最底層完成

8.        對等層實體之間虛擬通訊|

9.        TCP:面向連線的可靠的傳輸協議

10.    UDP:面向無連線的不可靠的傳輸協議

11.    埠是一種抽象的軟體結構。應用程式通過系統呼叫與某埠建立連線後,傳輸層傳給埠的資料都被響應的進行所接收,相應程序發給傳輸層的資料都通過該埠輸出。

12.    埠用一個整數型標示符來表示。埠號跟協議相關,TCP/IP傳輸層的兩個協議TCP和UDP是完全獨立的兩個軟體模組,因此各自的埠號也相互獨立。

13.    埠使用一個16位的數字來表示,它的範圍是0~65535,1024以下的埠號保留給預定義的服務。例如:http使用的是80埠。

14.    socket(套接字):windows sockets只支援一個通訊區域:網際域(AF_INET),這個域被使用網際協議簇通訊的程序使用。

15.    C/S模式:客戶機向伺服器提出請求,伺服器接收到請求後,提供相應的服務。

16.    套接字的型別

a)        流式套接字:(SOCK_STREAM):面向連線可靠的資料傳輸服務,按順序接收

b)       資料包式套接字:(SOCK_DGRAM):無連線服務。接收順序混亂。

c)       原始套接字(SOCK_RAM)

17.    基於TCP(面向連線)的socket程式設計

a)        伺服器端程式:

                        i.             建立套接字socket

                      ii.             將套接字繫結到一個本地地址和埠上bind

                     iii.             將套接字設為監聽模式,準備接收客戶請求listen

                    iv.             等待客戶請求到了;當請求到來後,接收連線請求,返回一個新的對應於此次連線的套接字accept

                      v.             用返回的套接字和客戶端進行通訊rend/recv

                    vi.             返回,等待另一客戶請求

                   vii.             關閉套接字

b)       客戶端程式:

                        i.             建立套接字socket

                      ii.             向服務端發出連線請求connect

                     iii.             和伺服器端進行通訊rend/recv

                    iv.             關閉套接字

18.    基於UDP的socket程式設計

a)        伺服器端(接收端)程式:

                        i.             建立套接字socket

                      ii.             將套接字繫結到一個本地地址和埠上bind

                     iii.             等待接收資料recv/from

                    iv.             關閉套接字

b)       客戶端(傳送端)程式:

                        i.             建立套接字socket

                      ii.             向伺服器傳送資料sendto

                     iii.             關閉套接字

19.    int WSAStartup (

  WORD wVersionRequested, //打算使用的最高winsock版本號 
  LPWSADATA lpWSAData  //是個結構體,接收socket的詳細資訊
);

20.    alt+F8:格式化程式碼

21.    面向TCP的連線,伺服器端

a)        套接字

SOCKET socket (
  int af,       //指定地址簇
  int type,     //socket型別
  int protocol  //協議

);

b)       繫結

int bind (
  SOCKET s,                          //要繫結的套接字
  const struct sockaddr FAR*  name,  //指定了該套接字的本地地址資訊
  int namelen                        //該地址結構的長度
);

struct sockaddr {

       u_short    sa_family;

       char       sa_data[14];

};

c)       監聽

int listen (
  SOCKET s,    
  int backlog  
);

d)       接受連線

SOCKET accept (
  SOCKET s,                   
  struct sockaddr FAR* addr
  int FAR* addrlen            
);
e)      傳送
int send (
  SOCKET s,              //建立連線的socket
  const char FAR * buf,  //傳送的資料
  int len,               //傳送資料的長度
  int flags              
);
f)      接收
int recv (
  SOCKET s,       
  char FAR* buf
  int len,        
  int flags       
);
g)      需要的檔案
#include <winsock2.h>
需要連線一個動態連結庫:ws2_32.lib

22.    伺服器端:

a)        Socket

b)       連線:connect

 int connect (
  SOCKET s,                          
  const struct sockaddr FAR*  name
  int namelen                        
);

c)       接收:recv

d)       傳送:send

e)        關閉:closesocket

23.    Tcp服務端程式:

  1. #include <WINSOCK2.H>
  2. #include <stdio.h>
  3. void main()  
  4. {  
  5.     WORD wVersionRequested;  
  6.     WSADATA wsaData;  
  7.     int err;  
  8.     wVersionRequested = MAKEWORD( 1, 1 );  
  9.     err = WSAStartup( wVersionRequested, &wsaData );  
  10.     if ( err != 0 ) {  
  11.         return;  
  12.     }  
  13.     if ( LOBYTE( wsaData.wVersion ) != 1 ||  
  14.         HIBYTE( wsaData.wVersion ) != 1 ) {  
  15.         WSACleanup( );  
  16.         return;   
  17.     }  
  18.     SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);  
  19.     SOCKADDR_IN addrSrv;  
  20.     addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);  
  21.     addrSrv.sin_family=AF_INET;  
  22.     addrSrv.sin_port=htons(6000);  
  23.     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
  24.     listen(sockSrv,5);  
  25.     SOCKADDR_IN addrClient;  
  26.     int len=sizeof(SOCKADDR);  
  27.     while(1)  
  28.     {  
  29.         SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);  
  30.         char sendBuf[100];  
  31.         sprintf(sendBuf,"Welcome %s to 劉窪村",inet_ntoa(addrClient.sin_addr));  
  32.         send(sockConn,sendBuf,strlen(sendBuf)+1,0);  
  33.         char recvBuf[100];  
  34.         recv(sockConn,recvBuf,100,0);  
  35.         printf("%s\n",recvBuf);  
  36.         closesocket(sockConn);  
  37.     }  
  38. }  

24.    Tcp客戶端程式:

  1. #include <WINSOCK2.H>
  2. #include <stdio.h>
  3. void main()  
  4. {  
  5.     WORD wVersionRequested;  
  6.     WSADATA wsaData;  
  7.     int err;  
  8.     wVersionRequested = MAKEWORD( 1, 1 );  
  9.     err = WSAStartup( wVersionRequested, &wsaData );  
  10.     if ( err != 0 ) {  
  11.         return;  
  12.     }  
  13.     if ( LOBYTE( wsaData.wVersion ) != 1 ||  
  14.         HIBYTE( wsaData.wVersion ) != 1 ) {  
  15.         WSACleanup( );  
  16.         return;   
  17.     }  
  18.     SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);  
  19.     SOCKADDR_IN addrSrv;  
  20.     addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//伺服器端的地址
  21.     addrSrv.sin_family=AF_INET;  
  22.     addrSrv.sin_port=htons(6000);  
  23.     connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
  24.     char recvBuf[100];  
  25.     recv(sockClient,recvBuf,100,0);  
  26.     printf("%s\n",recvBuf);  
  27.     send(sockClient,"This is 劉窪村",strlen("This is 劉窪村")+1,0);  
  28.     closesocket(sockClient);  
  29.     WSACleanup();  
  30. }  

25.    執行之後,開啟了6個客戶端,一個伺服器端。程式執行效果:

26.    面向UDP的連線

27.    伺服器:socket

a)        bind

b)       接收資料:

int recvfrom (
  SOCKET s,                   //套接字
  char FAR* buf,              //接收資料
  int len,                    //長度
  int flags,                  //會影響呼叫行為,0
  struct sockaddr FAR* from,  //接收發送方的地址資訊
  int FAR* fromlen            //接收長度
);

c)       關閉closesocket

d)       Cleanup

28.    UDP伺服器端程式:

  1. #include <WINSOCK2.H>
  2. #include <stdio.h>
  3. void main()  
  4. {  
  5.     WORD wVersionRequested;  
  6.     WSADATA wsaData;  
  7.     int err;  
  8.     wVersionRequested = MAKEWORD( 1, 1 );  
  9.     err = WSAStartup( wVersionRequested, &wsaData );  
  10.     if ( err != 0 ) {  
  11.         return;  
  12.     }  
  13.     if ( LOBYTE( wsaData.wVersion ) != 1 ||  
  14.         HIBYTE( wsaData.wVersion ) != 1 ) {  
  15.         WSACleanup( );  
  16.         return;   
  17.     }  
  18.     SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);  
  19.     SOCKADDR_IN addrSrv;  
  20.     addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);  
  21.     addrSrv.sin_family=AF_INET;  
  22.     addrSrv.sin_port=htons(6000);  
  23.     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));  
  24.     SOCKADDR_IN addrClient;  
  25.     int len=sizeof(SOCKADDR);  
  26.     char recvBuf[100];  
  27.     recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);  
  28.     printf("%s\n",recvBuf);  
  29.     closesocket(sockSrv);  
  30.     WSACleanup();  
  31. }  

28.    UDP客戶端:

a)        socket定義

b)       傳送:

   int sendto (
  SOCKET s,                        
  const char FAR * buf,            
  int len,                         
  int flags,                       
  const struct sockaddr FAR * to
  int tolen                        
);

 29.  UDP客戶端程式

  1. #include <WINSOCK2.H>
  2. #include <stdio.h>
  3. void main()  
  4. {  
  5.     WORD wVersionRequested;  
  6.     WSADATA wsaData;  
  7.     int err;  
  8.     wVersionRequested = MAKEWORD( 1, 1 );  
  9.     err = WSAStartup( wVersionRequested, &wsaData );  
  10.     if ( err != 0 ) {  
  11.         return;  
  12.     }  
  13.     if ( LOBYTE( wsaData.wVersion ) != 1 ||  
  14.         HIBYTE( wsaData.wVersion ) != 1 ) {  
  15.         WSACleanup( );  
  16.         return;   
  17.     }  
  18.     SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);  
  19.     SOCKADDR_IN addrSrv;  
  20.     addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  
  21.     addrSrv.sin_family=AF_INET;  
  22.     addrSrv.sin_port=htons(6000);  
  23.     sendto(sockClient,

    相關推薦

    VC++ socket程式設計例項

    1.        兩天計算機通訊需要協議,通訊的兩臺計算機IP必須唯一 2.        同一個計算機可以進行多個應用程式與其他計算機通訊,IP地址唯一,而埠號是區別同一計算機(同一IP)的唯一標示。 3.        實際上就類似於一個辦公室的總機號碼(IP)

    Golang Socket 程式設計例項

    服務端程式: package main import ( "net" "fmt" "strings" ) func handle(conn net.Conn) { defer conn.Close() buf := make([]byte, 2048) for { n,

    Linux Socket程式設計例項(一個Hello World程式)

    在Linux下寫了個小的socket程式,分為客戶端和伺服器端,服務端開一個埠(2000),做為一個daemon,等待客戶的連線請求.一旦有客戶連線,伺服器端打印出客戶端的IP地址和埠,並且向伺服器端傳送歡迎資訊和時間.下面是服務端的程式碼(tcpserver.c).由於這只是個簡單的程式,所

    Android學習筆記三十六:android之socket程式設計例項

    注意點:註冊訪問的網路許可權;android中UI執行緒不能有訪問網路的操作,否則會報android.os.NetworkOnMainThreadException的異常 <uses-permission android:name="

    VC++ socket通訊例項 總結

    1.        兩天計算機通訊需要協議,通訊的兩臺計算機IP必須唯一 2.        同一個計算機可以進行多個應用程式與其他計算機通訊,IP地址唯一,而埠號是區別同一計算機(同一IP)的唯一標示。 3.        實際上就類似於一個辦公室的總機號碼(IP)和分機

    android socket程式設計例項

    轉自:http://blog.csdn.net/wuchuanpingstone/article/details/6617276 Android客戶端通過socket與伺服器進行通訊可以分為以下幾步: 應用程式與伺服器通訊可以採用兩種模式:TCP可

    UDP windows下socket程式設計例項

    Server 端程式原始碼: #include <stdio.h> #include <Winsock2.h> void main() { SOCKET socket1; //InitWinsock();  WSADATA wsaData;     int iErrorCode;   

    UDP之socket程式設計例項

    不講解了,要求讀者: 1. 知道UDP是什麼 2. 索求Windows環境下的socket程式設計函式 3. 已經配置好了編譯環境——在Tools-option-中的設定 客戶端程式碼 #include <stdio.h> #inclu

    android socket程式設計例項

    android客戶端通過socket與伺服器進行通訊可以分為以下幾步: 應用程式與伺服器通訊可以採用兩種模式:TCP可靠通訊 和UDP不可靠通訊。 (1)通過IP地址和埠例項化Socket,請求連線伺服器:      socket = new Socket(HOST, PO

    vc socket tcp程式設計的簡單例項

    //Server端 #include <Winsock2.h> #include <stdio.h> void main() { WORD wVersionRequested; WSADATA wsaData; int er

    java socket網路程式設計例項程式碼(含服務端和客戶端)

    本程式碼為java socket網路程式設計例項程式碼,包括客戶端和服務端,實現客戶端傳送訊息,服務端接收並反饋訊息。 server.java為服務端程式碼。 client.java為客戶端程式碼。 服務端程式碼server.java: package socket;

    Python網路程式設計socket模組例項解析

    socket通常也稱作”套接字”,用於描述IP地址和埠,是一個通訊鏈的控制代碼,應用程式通常通過”套接字”向網路發出請求或者應答網路請求。 socket起源於Unix,而Unix/Linux基本哲學之一就是“一切皆檔案”,對於檔案用【開啟】【讀寫】【關閉】模式來操作。socket就是該模式的一個實現,soc

    vc 網路程式設計socket)TCP/UDP 介紹

    在網上找了很多的資料,現將這些資料整合起來,詳細介紹一下VC下的socket程式設計,並提供一個伺服器客戶端具體的例項。希望對您有所幫助 一、原理部分    在網路程式設計中最常用的方案便是Client/Server (客戶機/伺服器)模型。在這種方案中客戶應用程式向伺服器

    Socket程式設計之TCP例項(附C/C++程式碼詳解)

    說明: 主要分步驟給出Windows平臺下socket程式設計的一個TCP例項;使用WINDOWS下網路程式設計規範Winsock完成網路通訊; 對程式各部分細節進行描述。 套接字有三種傳輸型別SOCK_STREAM    SOCK_DGRAM   SOCK_RAW;

    java網路程式設計:12、基於UDP的socket程式設計(二)程式碼通訊-簡單例項

    宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、基於UDP伺服器端程式的編寫 二、基於UDP客戶端程式的編寫 三、系列文章(java網路程式設計) 通過上篇文章瞭解了基於UDP通訊的理論、基本步驟以及它跟TCP的區別

    Android的Socket通訊程式設計例項

    Android手機的應用,除了它的手機功能之外,另外一個吸引人的地方在於它的開放性,這一點iphone無法比擬,至少iphone太多商業化氣息。android為我們開啟另一扇交流之窗,而要實現交流,socket通訊必不可少。 java在socket通訊方面上已經有了很

    Java Socket 簡單程式設計例項

    之前照著書寫了一個例項,最後一次java實驗也就結束了,後來還有一個是寫計算機網路課程設計好像寫到了套接字Socket 現在又把重新拿出來,感覺是有不少東西要學習的。 所謂socket通常也稱作"套接字"。應用程式通常通過"套接字"向網路發出請求或者應答網路請求。 事實上網

    python socket程式設計入門(編寫server例項

    python 編寫server的步驟: 1. 第一步是建立socket物件。呼叫socket建構函式。如: socket = socket.socket( family, type ) family引數代表地址家族,可為AF_INET或AF_UNIX

    VC環境下UDP Socket程式設計示例

     VC下的Socket程式設計要包含winsock2.h標頭檔案,並在專案設定中加入連結庫ws2_32.lib.下面是一個用UDP實現的echo程式示例。 伺服器端程式碼: #include <stdio.h> #include <Winsock2.h> void main() {

    Socket程式設計java[簡單易懂],附帶Android Studio 專案聊天例項

    伺服器端 package socket_util; import java.io.BufferedReader; import java.io.IOException; import java.