TCP流式套接字的基本程式設計

2021-06-15 05:07:31 字數 2948 閱讀 8730

面向連線的客戶/伺服器程式工作模型

伺服器端程式

#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...