本例項使用面向連線協議的客戶/伺服器模式,其流程如圖2.3所示:
圖2.3 面向連線的應用程式流程圖
伺服器方程式:
#include
#include
#define true 1
main( )
server.sin_family = af_inet;
server.sin_port = inaddr_any;
if (bind(sock, (struct sockaddr *)&server, sizeof(server)) < 0)
length = sizeof(server);
if (getsockname(sock, (struct sockaddr *)&server, &length) < 0)
printf(「socket port #%d/n」, ntohs(server.sin_port));
listen(sock, 5);
len = sizeof(struct sockaddr);
do while (rval != 0);
closesocket(msgsock);
} while (true);
exit(0);
}
客戶方程式:
#include
#include
#define data 「half a league, half a league ...」
main(argc, argv)
int argc;
char *argv[ ];
server.sin_family = af_inet;
hp = gethostbyname(argv[1]);
if (hp == 0)
memcpy((char*)&server.sin_addr, (char*)hp->;h_addr, hp->;h_length);
sever.sin_port = htons(atoi(argv[2]));
if (connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0)
if (send(sock, data, sizeof(data)) < 0)
perror(「sending on stream socket」);
closesocket(sock);
exit(0);
}
2.5 乙個通用的例項程式
在上一節中,我們介紹了乙個簡單的socket程式例項。從這個例子我們可以看出,使用socket程式設計幾乎有乙個模式,即所有的程式幾乎毫無例外地按相同的順序呼叫相同的函式。因此我們可以設想,設計乙個中間層,它向上提供幾個簡單的函式,程式只要呼叫這幾個函式就可以實現普通情考網考網下的資料傳輸,程式設計者不必太多地關心socket程式設計的細節。
本節我們將介紹乙個通用的網路程式介面,它向上層提供幾個簡單的函式,程式設計者只要使用這幾個函式就可以完成絕大多數情考網考網下的網路資料傳輸。這些函式將socket程式設計和上層隔離開來,它使用面向連線的流式套接字,採用非阻塞的工作機制,程式只要呼叫這些函式查詢網路訊息並作出相應的響應即可。這些函式包括:
l initsocketsstruct:初始化socket結構,獲取服務埠號。客戶程式使用。
l initpassivesock:初始化socket結構,獲取服務埠號,建立主套接字。伺服器程式使用。
l closemainsock:關閉主套接字。伺服器程式使用。
l createconnection:建立連線。客戶程式使用。
l acceptconnection:接收連線。伺服器程式使用。
l closeconnection:關閉連線。
l querysocketsmsg:查詢套接字訊息。
l sendpacket:傳送資料。
l recvpacket:接收資料。
SOCKET套接字入門例項 附帶原始碼
伺服器端 int port 2000 指定埠 最後些在配置檔案中 string host 127.0.0.1 指定ip ipaddress ip ipaddress.parse host 把ip位址字串轉換為ipaddress型別的例項 ipendpoint ipep new ipendpoint ...
Socket程式設計例項
struct sockaddr sockaddr定義的標頭檔案 sys socket.h struct sockaddr in sockaddr in解決了sockaddr 的缺陷,實際上相當於把sockaddr 中的sa data分成了3個部分 sockaddr in 定義的標頭檔案 netine...
簡單的socket例項及原理(含原始碼)
所謂socket通常也稱作 套接字 用於描述ip位址bai和埠,是乙個通訊鏈的控制代碼。應用程式通常通過 套接字 向網路發出請求或者應答網路請求。socket分為服務端及客戶端,這裡我們用serversocket及clientsocket分別表示 伺服器監聽 伺服器端socket並不主動指定的客戶端...