日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

winsok编程历程

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 winsok编程历程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Socket編程是網絡編程的重要組成部分,編寫簡單的服務端程的程序的一般的步驟如下 第一步:包含WinSocket的頭文件和動態鏈接庫(DLL) #include <Winsock2.h> #include <windows.h>
#pragma comment(lib,"ws2_32")
第二步:初始化WSAStartup 在MSDN中WSAStarup的原型如下: int WSAStartup(
? __in?? WORD wVersionRequested,?? __out? LPWSADATA lpWSAData );
其中的第一個參數是版本,第二個參數是一個指向WSADATA結構體的指針,代碼如下:
WORD Version = MAKEWORD(2,2);? //通過MAKEWORD來設定版本,高版本和低版本都為2,也就是限定了版本必須為2
WSADATA wsadata??????????????????????? //結構體的一個成員 wsadata
//初始化并判斷是不是成功,如果成功的話返回的是0,不成功的話返回的值為非0,那么就要使用WSAleanup()函數了
if(WSAStartup(Version,&wsadata)){ cout<<"WSAStartup Error!"<<endl; WSACleanup(); }
第三部,初始化一個Socket, 在MSDN中socket的原型如下 SOCKET WSAAPI socket(?? __in? int af,?? __in? int type,?? __in? int protocol );
其中第一個參數為網絡層協議類型,第二個參數為socket類型,第三個參數為傳輸層的協議類型,代碼如下:
//第一個參數多數時候為AF_INET,第二個參數可以為SOCK_STREAM適用于可信連接,也就是tcp鏈接,或者為SOCK_DGRAM,適用于UDP協議
第三個參數為傳輸層協議,如果第二個參數為SOCK_STREAM,這里就為IPPROTO_TCP,如果是SOCK_DGRAM,這里就為IPPROTO_UDP?



???




SOCKET ServerSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(ServerSocket ==INVALID_SOCKET){???? cout<<"Socket Fail"<<endl; }
第四步:bind
在MSDN中bind的定義如下: int bind(
? __in? SOCKET s,
? __in? const struct sockaddr* name,?? __in? int namelen );
第一個參數一個已經初始化的socket,第一個參數為執行sockaddr或者是sockaddr_in的結構體的起始地址,
第三個參數為結構體的大小,代碼如下:
sockaddr_in? ServerAddr;//定義一個結構體成員,這里使用的是sockaddr_in結構體 ServerAddr.sin_family=AF_INET;//初始化成員的sin_family為AF_INET ServerAddr.sin_addr.S_un.S_addr=INADDR_ANY;//允許任意的IP地址進行連接 ServerAddr.sin_port=htons(2012);//偵聽端口為2012,這里使用了htons函數
//這里需要說明的是需要對第二個參數進行強制類型轉換,(LPSOCKADDR)&ServerAddr,并且判斷是不是bind成功,成功后返回的是為0
if(bind(ServerSocket,(LPSOCKADDR)&ServerAddr,sizeof(ServerAddr))){???? cout<<"bind Fail"<<endl; }
第五步:偵聽
在MSDN中listen的原型如下: int listen(
? __in? SOCKET s,?? __in? int backlog );
依然第一個參數為初始化了的socket,第二個參數為最大允許的連接數,代碼如下: //這里依然使用的是上面的socket:ServerSocket if(listen(ServerSocket,5)){???? cout<<"listen Fail"<<endl; }



?var cpro_psid ="u2572954"; var cpro_pswidth =966; var cpro_psheight =120;




第六步:accept 在MSDN中原型如下: SOCKET accept(?? __in???? SOCKET s,
? __out??? struct sockaddr* addr,?? __inout? int* addrlen );
第一個參數一個新的客戶端的Socket,這里需要定義一個,第二個參數依然為執行sockaddr或者是sockaddr_in的結構體的首地址,第三個參數為長度,這里accept負責對新定義的socket進行初始化,如果成功accept返回的一個可用的sokcet。 代碼如下:
sockaddr_in Clientaddr;//定義一個結構體成員
SOCKET ClientSocket;//定義一個socket用于接收accept的返回值 int lAddrlen=sizeof(Clientaddr);//獲取結構體的長度
while(TRUE){//因為要一直的偵聽,所以這里使用無限循環
ClientSocket=accept(ServerSocket,(LPSOCKADDR)&Clientaddr,&lAddrlen); //與上面類似,需要強制轉換,第一個參數為已經初始化的socket if(ClientSocket==INVALID_SOCKET){ cout<<"accept Fail"<<endl; } else{
cout<<"接受到一個信息"<<endl; }
第七步:如果accept成功,recv消息 在MSDN中recv原型如下: int recv(
? __in?? SOCKET s,?? __out? char* buf,?? __in?? int len,?? __in?? int flags );
第一個參數為accept返回的socket,第二個參數為輸出接收的消息的一個指針,第三個為消息的長



下載文檔到電腦,查找使用更方便
1下載券? 95人已下載


下載



還剩7頁未讀,繼續閱讀





定制HR最喜歡的簡歷

我要定制簡歷



??????????? /* pc閱讀頁3-4頁間(新) */
??????????? var cpro_id = "u2845472";
???????







??????? var cpro_psid = "u2787156";
??????? var cpro_pswidth = "966";
??????? var cpro_psheight = "120";
???

總結

以上是生活随笔為你收集整理的winsok编程历程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。