面向連線的客戶/伺服器程式工作模型
伺服器端程式
#include
#pragma comment( lib,
"ws2_32"
)#include
int main()
else
//---------------②建立用於監聽的流式套介面s---------------
socket s= socket( af_inet, sock_stream, ipproto_tcp);
if( s== invalid_socket)
else
printf(
"已建立用於監聽的套介面,套介面號:[%u]/n"
, s);
//---------------③繫結,使用bind()----------------------
struct sockaddr_in sadd;
sadd.sin_family= af_inet;
sadd.sin_port= htons(
5555 );
sadd.sin_addr.s_un.s_addr= inet_addr(
"192.168.16.1"
);if
( bind( s,( sockaddr*)& sadd,
sizeof
( sadd))== socket_error)
else
//---------------④監聽狀態-------------
if( listen( s,
2 )== socket_error)
//----------------⑤迴圈接受客戶的連線請求---------------------------
struct sockaddr_in cadd;
int caddlen=
sizeof
( cadd);
socket c;
while
(true
)else
printf(
"|可以在套介面[%u]上傳送接收資料了!/n"
, c);
//#########################開始傳送、接收###################### 注意都要在新套介面c上進行
//#########################結束傳送、接收######################
closesocket( c);
printf(
"|與主機ip位址是:[%s]/n|埠號是:[%u]的連線完畢/n"
, inet_ntoa( cadd.sin_addr), ntohs( cadd.sin_port));
char xx;
printf(
"|-------------------------------------/n需要退出嗎?(y/n)"
);scanf(
"%c"
,& xx);
if( xx==
'y'|| xx==
'y')
}closesocket( s);
wsacleanup();
return
0 ;}
客戶端程式
#include
#pragma comment( lib,
"ws2_32"
)#include
int main()
else
printf(
"|---------------------------------------/n"
);//-------②建立用於監聽的流式套介面s,使用socket()-----------------
socket s= socket( af_inet, sock_stream, ipproto_tcp);
if( s== invalid_socket)
else
printf(
"|已建立用於監聽的套介面,套介面號:[%u]/n"
, s);
printf(
"|---------------------------------------/n"
);//------③本地位址bind(可以不做這部分,如果不繫結,系統將自動分配)--------
/*struct sockaddr_in cadd;
cadd.sin_family=af_inet;
cadd.sin_port=htons(4444);
cadd.sin_addr.s_un.s_addr=htonl(inaddr_any);
if (bind(s,(sockaddr*)&cadd,sizeof(cadd))==socket_error)
*///-------填寫要連線的伺服器位址資訊---------
struct sockaddr_in sadd;
sadd.sin_family= af_inet;
sadd.sin_port= htons(
5555 );
sadd.sin_addr.s_un.s_addr= inet_addr(
"192.168.16.1"
);//--------④將套介面s與遠端主機相連--------------
if( connect( s,( sockaddr*)& sadd,
sizeof
( sadd))== invalid_socket)
else
//--------------⑤關閉套接字s,終止對動態鏈結庫的訪問----------
closesocket( s);
printf(
"|---------------------------------------/n"
);printf(
"|連線完畢/n"
);wsacleanup();
return
0 ;}
TCP流式套接字的select模式程式設計
選擇 select 模型是winsock中最常見的 i o模型。核心便是利用 select 函式,實現對 i o的管理!利用 select 函式來判斷某socket上是否有資料可讀,或者能否向乙個套接字寫入資料,防止程式在socket處於阻塞模式中時,在一次 i o 呼叫 如send或recv ac...
基本TCP套接字程式設計
基本tcp客戶 伺服器程式的套接字函式 返回 若成功則為非負描述符,若則為 1 其中family引數指明協議族,為某個常值。該引數也往往稱為協議域。family 說明af inet ipv4協議 af inet6 ipv6協議 af local unix域協議 af route 路由套接字 af k...
基本TCP套接字程式設計
經過最近一段時間的系統學習,對於傳輸協議中tcp協議的套接字程式設計以及11中狀態轉化有了一定的認識,現在做出 以下總結 上圖是幾乎所有教科書上關於tcp客戶端 伺服器通訊過程中api函式的彙總。首先看伺服器端 1 服務端以被動連線的方式參與通訊,因此首先呼叫socket int family,in...