基於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的模式太複雜...