close
Warning:
Can't synchronize with repository "(default)" (Unsupported version control system "svn": /usr/lib/python2.7/dist-packages/libsvn/_repos.so: failed to map segment from shared object: Cannot allocate memory). Look in the Trac log for more information.
- Timestamp:
-
Jan 20, 2009, 3:29:19 PM (18 years ago)
- Author:
-
wade
- Comment:
-
--
Legend:
- Unmodified
- Added
- Removed
- Modified
-
|
v17
|
v18
|
|
| 28 | 28 | }}} |
| 29 | 29 | == 網路程序連線流程 == |
| 30 | | * Server:socket → blind → listen → accept |
| 31 | | * Client:socket → connect |
| | 30 | * Server:socket → blind → listen → accept。 |
| | 31 | * Client:socket → connect。 |
| 32 | 32 | 1. socket: |
| 33 | | * man socket |
| 34 | 33 | * socket 可以視為管線 (pipe) 概念的延伸,只是它不止可以在本機電腦,還可以透過網路來傳輸資料。它與管線最大的不同在於它將程序區分為 server 與 client,可以進行一對一或多對一的資訊傳遞服務。 |
| 35 | | * socket() 會在 linux 上產生一個檔案名稱,通常存在 /tmp 中,檔案名稱也就是服務的辨識子埠號 (port #),負責將連接請求繞到正確的伺服器處理程序。[wiki:wade/tcp_port_list] |
| | 34 | * socket() 會在 linux 上產生一個檔案名稱,通常存在 /tmp 中,檔案名稱也就是服務的辨識子埠號 (port #),負責將連接請求繞到正確的伺服器處理程序。[wiki:wade/tcp_port_list]。 |
| | 35 | * 範例: |
| | 36 | {{{ |
| | 37 | int socket ( int domain, int type, int protocol ); |
| | 38 | -- domain: |
| | 39 | PF_UNIX, PF_LOCAL local connection 用在本機內資料傳輸。 |
| | 40 | 資料型態:#include <sys/un.h> |
| | 41 | struct sockaddr_un{ |
| | 42 | sa_family_t sun_family; /*AF_UNIX*/ |
| | 43 | char sun_path[]; /*pathname*/ |
| | 44 | }; |
| | 45 | PF_INET IPv4 Internet protocols IP 的通訊協定。 |
| | 46 | 資料型態:#include <netinet/in.h> |
| | 47 | struct sockaddr_in{ |
| | 48 | short int sin_family; /*AF_INET*/ |
| | 49 | unsigned short int sin_port; /*Port number*/ |
| | 50 | struct in_addr sin_addr; /*Internet address*/ |
| | 51 | }; |
| | 52 | -- type: |
| | 53 | SOCK_STREAM TCP 提供循序、雙向、可確保完整性的資料傳輸。 |
| | 54 | SOCK_DGRAM UDP 提供不需連接,不確保完整性的資料傳輸。 |
| | 55 | -- protocol: |
| | 56 | 參考 /etc/protocols ,常用 0 。 |
| | 57 | }}} |
| 36 | 58 | 2. blind: |
| 37 | 59 | * socket 命名必須透過 blind() 這個 system call 。而 server 就在這具名的 socket 上等待 client 的連結請求。 |