SOCKET類的設計和實現

2021-09-30 03:03:11 字數 1388 閱讀 4639

socket類的設計和實現

winsock基本知識

這裡不打算系統地介紹socket或者winsock的知識。首先介紹winsock api函式,講解阻塞/非阻塞的概念;然後介紹socket的使用。

winsock api

socket介面是網路程式設計(通常是tcp/ip協議,也可以是其他協議)的api。最早的socket介面是berkeley介面,在unxi作業系統中實現。winsock也是乙個基於socket模型的api,在microsoft windows作業系統類中使用。它在berkeley介面函式的基礎之上,還增加了基於訊息驅動機制的windows擴充套件函式。winscok1.1只支援tcp/ip網路,winsock2.0增加了對更多協議的支援。這裡,討論tcp/ip網路上的api。

socket介面包括三類函式:

第一類是winsock api包含的berkeley socket函式。這類函式分兩部分。第一部分是用於網路i/o的函式,如

accept、closesocket、connect、recv、recvfrom、select、send、sendto

另一部分是不涉及網路i/o、在本地端完成的函式,如

bind、getpeername、getsockname、getsocketopt、htonl、htons、inet_addr、inet_nton

ioctlsocket、listen、ntohl、ntohs、setsocketopt、shutdow、socket等

第二類是檢索有關網域名稱、通訊服務和協議等internet資訊的資料庫函式,如

gethostbyaddr、gethostbyname、gethostname、getprotolbyname

getprotolbynumber、getserverbyname、getservbyport。

第三類是berkekley socket例程的windows專用的擴充套件函式,如gethostbyname對應的wsaasyngethostbyname(其他資料庫函式除了gethostname都有非同步版本),select對應的wsaasynselect,判斷是否阻塞的函式wsaisblocking,得到上一次windsock api錯誤資訊的wsagetlasterror,等等。

從另外乙個角度,這些函式又可以分為兩類,一是阻塞函式,一是非阻塞函式。所謂阻塞函式,是指其完成指定的任務之前不允許程式呼叫另乙個函式,在windows下還會阻塞本執行緒訊息的傳送。所謂非阻塞函式,是指操作啟動之後,如果可以立即得到結果就返回結果,否則返回表示結果需要等待的錯誤資訊,不等待任務完成函式就返回。

首先,非同步函式是非阻塞函式;

其次,獲取遠地資訊的資料庫函式是阻塞函式(因此,winsock提供了其非同步版本);

在berkeley socket函式部分中

陣列類 類的設計和實現

第一步 類的設計 myarray.h pragma once includeusing namespace std class array 建立乙個arry類 第二步 寫類的實現 myarray.cpp include myarray.h array array int length m lengt...

socket類實現傳送

server端 include include void main if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 socket socksrv socket af inet,sock stream,0 sockaddr in addrs...

socket實現類群聊功能

使用socket做了乙個類似群聊功能的demo,來記錄這兩天學習socket的成果。在實現功能之前先看下sockect通訊的基本流程 socket服務端 1.socket 建立套接字 3.listen 監聽套接字,準備接受客戶請求 4.accept 接收客戶端請求,返回乙個對應此連線新套接字 5.用...