源**:
基於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();
Socket 通訊原理
socket,又稱 套接字 網路上的兩個程式通過乙個雙向的通訊連線實現資料的交換,這個連線的一端稱為乙個 socket。socket 的英文願意是 孔 或 插座 在 internet 上的主機一般執行了多個服務軟體,同時提供幾種服務。每種服務都開啟乙個 socket,並繫結到乙個埠上,不同的埠對應不...
Socket 通訊原理
socket 的中文翻譯過來就是 套接字 套接字是什麼,我們先來看看它的英文含義 插座。socket 就像乙個 插座,負責連通兩端的 進行點對點通訊,讓 可以進行通訊,埠就像插座上的孔,埠不能同時被其他程序占用。而我們建立連線就像把插頭插在這個插座上,建立乙個 socket 例項開始監聽後,這個 插...
Socket 通訊原理
socket是什麼呢?socket是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。不過socket...