第十四課網路程式設計

2021-04-03 01:39:27 字數 4383 閱讀 6368

第十四課網路程式設計

int wsastartup (

word wversionrequested, 

lpwsadata lpwsadata 

);wversionrequested引數用語指定準備載入得winsock 庫得版本,高委位元組指定所需要得winsock庫得副版本,而地位位元組則是主版本,課用makeword(x,y)x是高委位元組,y是低位位元組方便得獲得wversionrequested得正確值。lpwsadata引數是指向wsadata結構得指標,wsastartup用其載入得庫版本有關得資訊填在這個結構中。

typedef struct wsadata wsadata, far * lpwsadata;

看msdn中得例子。

socket socket (  int af,  int type, int protocol); 第乙個引數af指定位址族,對於tcp/ip他只能是af_inet 第二個引數指定socket型別sock_stream流式套節字 sock_dgram資料報套節字

,第三個引數一般選0,表示為 特定位址家族選定合適得協議。

注意網路上傳輸必須要用網路位元組序,如果不是,則一定要通過 函式 或者資料結構強制 轉換成 網路位元組 序流法。

socket socksrv=socket(af_inet,sock_stram,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr=htonl(inaddr_any);

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(6000);

bind(socksrv,(sockaddr*)&addrsrv,sizeof(sockaddr));

listen(socksrv,5);

sockaddr_in addrclient;

int len=sizeof(sockaddr);

while(1)

int bind (

socket s,                         

const struct sockaddr far*  name, 

int namelen                       

);struct sockaddr ;  

sa_family 指定該位址家族,在這裡必須設為af_inet.sa_data 僅僅式表示要求一塊記憶體分配區,起到佔位得作用,一般用 sockaddr_in 來代替sockaddr

int listen (

socket s,   

int backlog  //等待連線得最大佇列長度。

);#最後要在link 中連線庫  ws2_32.lib

#include

#include

void main(void)

if ( lobyte( wsadata.wversion ) != 2 ||

hibyte( wsadata.wversion ) != 2 )

//以下部分為自己新增

socket sockclient=socket(af_inet,sock_stream,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(6000);//網路位元組序

connect(sockclient,(sockaddr*)&addrsrv,sizeof(sockaddr));//求位元組長度

char recvbuf[100];

recv(sockclient,recvbuf,100,0);//100為長度,0為標記。

printf("%s/n",recvbuf);

send(sockclient,"this is lisi ",strlen("this is lisi ")+1,0);

closesocket(sockclient);

wsacleanup();

} //客戶斷 完成

//udp服務斷

//udp客戶斷

#include

#include

void main(void)

if ( lobyte( wsadata.wversion ) != 2 ||

hibyte( wsadata.wversion ) != 2 )

//以下部分為自己新增得

socket sockclient=socket(af_inet,sock_dgram,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");//將十進位制轉化成ul型別得網路位元組序

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(6000);

sendto(sockclient,"hello",strlen("hello")+1,0,(sockaddr*)&addrsrv,sizeof(sockaddr));

closesocket(sockclient);

wsacleanup();

}udp聊天

如果採用tcp 三次握手由於空閒時間比較大。 連線應該保持呢還是先斷開等到對方說話得時候再建立連線呢?

最後乙個 雙向聊天 曉程式

//伺服器端, 注意連線ws2_32.lib

#include

#include

void main(void)

if ( lobyte( wsadata.wversion ) != 2 ||

hibyte( wsadata.wversion ) != 2 )

//以下部分為自己新增 得

socket socksrv=socket(af_inet,sock_dgram,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr=htonl(inaddr_any);

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(6000);

bind(socksrv,(sockaddr*)&addrsrv,sizeof(sockaddr));

char recvbuf[100];

char sendbuf[100];

char tempbuf[200];

sockaddr_in addrclient;

int len=sizeof(sockaddr);

while(1)

sprintf(tempbuf,"%s say: %s",inet_ntoa(addrclient.sin_addr),recvbuf);

printf("%s/n",tempbuf);

printf("please input data:/n");

gets(sendbuf);

sendto(socksrv,sendbuf,strlen(sendbuf)+1,0,(sockaddr*)&addrclient,len);

}closesocket(socksrv);

wsacleanup();

}//客戶斷

#include

#include

void main(void)

if ( lobyte( wsadata.wversion ) != 2 ||

hibyte( wsadata.wversion ) != 2 )

//以下部分為自己田間

socket sockclient=socket(af_inet,sock_dgram,0);

sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr=inet_addr("127.0.0.1");

addrsrv.sin_family=af_inet;

addrsrv.sin_port=htons(6000);

char recvbuf[100];

char sendbuf[100];

char tempbuf[200];

int len =sizeof(sockaddr);

while(1)

sprintf(tempbuf,"%s say :%s",inet_ntoa(addrsrv.sin_addr),recvbuf);

printf("%s/n",tempbuf);

}closesocket(sockclient);

wsacleanup();

}

python第十四課 2018 5 3

正則 數字 d 字母 s asciis 97 a 65 a pjack s.s s.p name 實驗 re模組簡介 re模組是python中處理正規表示式的乙個模組,通過re模組的方法,把正規表示式pattern編譯成正則物件,以便使用正則物件的方法 re的方法 match search matc...

Android第十四課筆記

1 activity簡介 activity是android 應用程式的四大元件之一,它負責安卓應用程式的使用者介面 乙個應用程式一般會包含若干個activity,每乙個activity元件負責乙個使用者介面的展現 activity用來提供乙個能讓使用者操作並與之互動的介面 2 activity的四種...

第十四課課堂筆記

w檢視系統負載 lscpu 檢視cpu具體資訊 cat proc cpuinfo也可以檢視cpu具體資訊 uname a 檢視核心版本資訊 cat proc meminfo 檢視記憶體詳細資訊 vmstat n 1 每一秒鐘顯示一次系統負載 cache 快取區,是快取記憶體,是位於cpu和主記憶體之...