基於TCP IP協議的網路程式設計

2021-07-04 13:36:21 字數 3082 閱讀 9907

基於tcp/ip協議的網路程式設計

定義變數——獲得winsock版本——載入winsock庫——初始化——建立套接字——設定套接字選項——關閉套接字——解除安裝winsock庫——釋放所有資源

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

伺服器socket程式流程:

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

客戶端:

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

程式設計舉例:

約定傳送訊息的格式為如下結構體:

typedef struct

tcpmessage;

應用程式的標頭檔案如下:

#include

#pragma comment(lib,"ws2_32")

#include

埠號為: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)

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)

4、監聽埠

if(listen(slisten, 5)== socket_error)

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

socket sclient;//用於儲存accept返回的套接字

sclient = accept(slisten,0,0);//accept函式呼叫失敗則繼續等待連線。

if(sclient == invalid_socket)

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

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

tcpmessagerevdata;//定義接收訊息的結構體變數

int ret=recv(sclient,(char *)&revdata,sizeof(revdata),0);

if(ret>0)//說明,收到位元組

} 6.2、傳送:

tcpmessagesenddata;

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)

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)

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)

//注意,要先把伺服器開啟,否則連線失敗

5、   收發通訊

用send和recv函式,這一點和伺服器端一樣

6、   關閉

closesocket(sclient);//客戶端只有乙個連線套接字

wsacleanup();

Python網路程式設計 TCP IP協議

5 ip位址是電腦在網路世界中全球唯一標識,位址是乙個32位的二進位制數,被分割為4個 8位二進位制數 也就是4個位元組 ip位址通常用 點分十進位制 表示成 a.b.c.d 的形式,其中,a,b,c,d都是0 255之間的十進位制整數。例 點分十進ip位址 100.4.5.6 實際上是32位二進位...

基於TCP IP的網路程式設計步驟

一.tcp流式套接字的程式設計步驟 在使用之前須鏈結庫函式 工程 設定 link 輸入ws2 32.lib 伺服器端程式 1 載入套接字型檔 2 建立套接字 socket 3 將套接字繫結到乙個本地位址和埠上 bind 4 將套接字設為監聽模式,準備接收客戶請求 listen 5 等待客戶請求到來 ...

網路程式設計的OSI協議和TCP IP協議

在網路發展中,人們為了規範網際網路的資訊互動,就必須遵守一種約定,從而引出了osi和tcp ip的協議。首先講一下osi協議,它是一種開放系統的互聯模式。有七層結構分別為應用層 表示層 會話層 傳輸層 網路層 資料鏈路層和物理層。它們每一層都有各自的一些協議。但是在後來的規劃中發現osi的模式太複雜...