Mac OS X下的網路程式設計 socket 的機制

2021-07-03 22:03:08 字數 2329 閱讀 8776

對於socket的機制來說,應該都是差不多的

如果用c來寫的話,我給出乙個簡要說明

1.1 什麼是socket?

socket是網路檔案描述符。在基於socket的程式設計技術中,使用者不直接訪問傳送和接收包的網路介面裝置,而是建立乙個中間檔案描述符來處理程式設計介面到網路的操作。

1.2 socket包括哪些內容?

乙個特殊的通訊域,比如乙個網路連線

乙個特殊的通訊型別,比如流或者資料報

乙個特殊的協議,比如tcp或者udp

1.3 unix的socket() c函式詳細說明:

int socket(int domain, int type, int protocol)

domain的取值:

pf_unix  unix ipc通訊

pf_inet  ipv4通訊

pf_inet6 ipv6

pf_ipx  novell ipx

pf_netlink kernel使用者介面驅動程式

pf_x25  x.25

pf_ax25

pf_atmpvc atm pvc

pf_packet 低階包介面

type的取值:

sock_stream 使用面向連線的通訊包

sock_dgram 使用無連線的通訊包

sock_seqpacket 使用有固定最大長度的面向連線的通訊包

sock_raw 使用原ip包

sock_rdm 使用不保證次序的可靠資料報

protocol:

一般使用與type對應的預設協議,用0表示。

例如: int newsocket = socket(pf_inet, sock_stream,  0 );//使用tcp

1.4 使用面向連線的套接字

ip領域只有兩種型別: connection-oriented, connectionless

使用面向連線的套接字,伺服器和客戶端需要如下通訊方式:

server   client

socket() socket()

bind()

listen()

accept() <---- connect()

recv()   <---- send()

send()   ----> recv()

close()  <---> close()

1.5 使用無連線的套接字

sock_dgram使用udp協議。通訊方式如下:

udp server udp client

socket() socket()

bind()

recvform() <--- sendto()

sendto()   ---> recvform()

close()  close()

1.6 使用無阻塞的i/o方法

什麼是阻塞? 

比如使用recv(),如果函式接受不到資料,就會阻塞程式的繼續執行。

如何防止阻塞?

使用fcntl()函式,把套接字設定為無阻塞模式。

int newsocket;

newsocket = socket(pf_inet, sock_stream, 0 );

fcntl( newsocket, f_setel, o_nonblock );

以後使用recv()就不會阻塞了。

另一種方式是使用多路套接字select()

2 winsock技術

總的說來,就是模仿unix socket的實現。

2.1 winsock下的函式和流程

server  client

wsastartup() wsastartup()

wsasocket() wassocket()

bind()

listen()

wsaaccept() <-- wsaconnect()

wsarecv()   <-- wsasend()

wsasend()   --> wsarecv()

close()     <-> close()

wsacleanup() wsacleanup()

與unix socket的最主要區別就是在最上面加了wsastartup()函式,最後加了wsacleanup()函式。中間都是一樣的。

int wsastartup(word wversion, lpwsadata lpwsadata)

第乙個引數是版本,要求2.2 還是1.1.

函式成功以後,lpwsadata指向乙個結構體,包括win sock的一些資訊。

wsacleanup()函式用來釋放winsocket庫,這個函式之後,再呼叫任何socket函式,都會出錯。

網路程式設計 ServerSocket與Socket

搭建伺服器 占用埠號 serversocket server newserversocket 55565 等待伺服器連線 socket socket server.accept socket socket newsocket localhost 55565 搭建伺服器 占用埠號 serversock...

python入門教程之十九網路程式設計socket

網路層是位址簇 客戶端寫法 import socket client socket.socket 宣告socket型別,同時生成socket連線物件 client.connect localhost 6969 連線本地埠 client.send hello world data client.rec...

Mac OS X 下 App 的解除安裝

ossafari 應用伺服器 xcode macos 資料夾,則是包含了此應用程式的真正的可執行檔案 類似 windows 下的 exe 檔案 當然,一些程式可能包含不只乙個的可執行檔案。resources,顧名思義,就是資源檔案,包含圖示,語言包,以及其它各種檔案,這個沒有嚴格的限制。2,通過 g...