第十四課網路程式設計
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和主記憶體之...