1 / 34

Socket 程式設計

Socket 程式設計. Outline. Introduction Function Call Design. Introduction. TCP/IP 是一個協定,是一組支援網路溝通協定的集合 。 定義網路 傳送時 的封包 說明封包應 包含哪些資訊 TCP/IP 模組架構包含 4 個 階層 網路 存取 層 ( 提供主機與實體網路連接,並具有發送封 包的能力 ) 網際網路層 ( 提供與硬體無關 的 IP address ,並將封包封送至網路上 ) 傳輸層 ( 是與網路應用程式間的界 面,可分為 TCP 、 UDP)

khuong
Download Presentation

Socket 程式設計

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Socket 程式設計

  2. Outline • Introduction • Function Call • Design

  3. Introduction • TCP/IP是一個協定,是一組支援網路溝通協定的集合。 • 定義網路傳送時的封包 • 說明封包應包含哪些資訊 • TCP/IP模組架構包含4個階層 • 網路存取層 (提供主機與實體網路連接,並具有發送封包的能力) • 網際網路層 (提供與硬體無關的IP address,並將封包封送至網路上) • 傳輸層 (是與網路應用程式間的界面,可分為TCP、UDP) • 應用層 (為網路除錯、檔案傳輸、遠端控制和網際網路活動提供應用程式)

  4. Introduction (cont.) • TCP • TCP是一個連結協定,透過TCP可確保接收端收到完整、正確的資料 • UDP • UDP則是一個非連結協定,比TCP快,但可靠度差

  5. Introduction (cont.) • “Socket” 是一種可做雙向資料傳輸的通道,可經由此與 local 或是 remote 的程式做溝通。 • Socket • local socket:主要用來與本地端的程序溝通 • internet-domain socket:用來與遠地端的程序溝通

  6. Outline • Introduction • Function Call • Design

  7. Function Call • IPv4 socket定址結構 structsockaddr_in { sa_family_tsin_family;            unsigned short intsin_port; structin_addrsin_addr;     };

  8. Function Call (cont.) • IPv4 socket定址結構 • Ex: #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> structsockaddr_inadr_srvr; adr_srvr.sin_family = AF_INET; adr_srvr.sin_addr.s_addr = inet_addr("192.168.1.100"); //adr_srvr.sin_addr.s_addr = inet_addr(INADDR_ANY); adr_srvr.sin_port = htons(8000);

  9. Function Call (cont.) • 不論是TCP或UDP作為傳輸協定,都要透過socket作資料傳輸,首要工作是先建立socket • intsocket(int domain, int type, protocol);

  10. Function Call (cont.) • socket() • Ex: #include <sys/types.h> #include <sys/socket.h> Intsockfd; sockfd= Socket(AF_INET, SOCK_STREAM, 0); 傳回值: 成功:傳回socket ID。 失敗:傳回-1。

  11. Function Call (cont.)

  12. Function Call (cont.)

  13. Function Call (cont.) • 將IPv4 socket定址結構連結到所建立的socket • int bind(intsockfd, conststructsockaddr *my_addr, size_tadr_len);

  14. Function Call (cont.) • bind() • Ex: #include <sys/socket.h> bind(sockfd, (structsockaddr*)&adr_srvr, sizeof(structsockaddr)); 傳回值: 成功:傳回 0。 失敗:傳回-1。

  15. Function Call (cont.) • 等待client端的連線要求,會把連線請求放在連線佇列中 • int listen(int sockfd, int backlog);

  16. Function Call (cont.) • listen() • Ex: #include <sys/socket.h> Intnum = 5; listen(sockfd, num); 傳回值: 成功:傳回 0。 失敗:傳回-1。

  17. Function Call (cont.) • 呼叫accept函數來處理並接受佇列中的連線請求 • int accept(intsocketfd, structsockaddr *addr, socklen_taddrlen);

  18. Function Call (cont.) • accept() • Ex: #include <sys/socket.h> accept(sockfd, (structsockaddr*)&adr_srvr, (structsockaddr*)&sizeof(adr_srvr)); 傳回值: 成功:傳回client的socket ID,稱為connect socket 。 失敗:傳回-1。

  19. Function Call (cont.) • 用connect()函數向server端要求建立連線 • int connect(intsockfd, structsockaddr *serv_addr, intaddrlen);

  20. Function Call (cont.) • connect() • Ex: #include <sys/socket.h> connect(sockfd, (structsockaddr*)&adr_srvr, (structsockaddr*)&sizeof(adr_srvr)); 傳回值: 成功:傳回 0。 失敗:傳回-1。

  21. Function Call (cont.) • 將資料寫入已經開啟的socket • intwrite(intsockfd, char *buf, intlen);

  22. Function Call (cont.) • write() • Ex: #include <sys/socket.h> Char buf[MAX_PATH] = “HelloWorld”; write(sockfd, buf, sizeof(buf)); 傳回值: 成功:傳回寫入的字元數。 失敗:傳回-1。

  23. Function Call (cont.) • 從已經開啟的socket讀取資料 • int read(intsockfd, char *buf, intlen);

  24. Function Call (cont.) • read() • Ex: #include <sys/socket.h> Char buf[MAX_PATH]; read(sockfd, buf, sizeof(buf)); 傳回值: 成功:傳回接收的字元數。 失敗:傳回-1。

  25. Function Call (cont.) • 從已經開啟的socket傳送資料 • int send(intsockfd, const void *msg, intlen, unsigned int flags);

  26. Function Call (cont.) • send() • Ex: #include <sys/types.h> #include <sys/socket.h> Char buf[MAX_PATH] = “HelloWorld”; send(sockfd, buf, sizeof(buf), 0); 傳回值: 成功:傳回傳送的字元數。 失敗:傳回-1。

  27. Function Call (cont.) • 從已經開啟的socket接收資料 • intrecv(intsockfd, const void *msg, intlen, unsigned int flags);

  28. Function Call (cont.) • recv() • Ex: #include <sys/types.h> #include <sys/socket.h> Char buf[MAX_PATH]; recv(sockfd, buf, sizeof(buf), 0); 傳回值: 成功:傳回接收的字元數。 失敗:傳回-1。

  29. Function Call (cont.) • 呼叫close()終止client端和server端的連線。 • intclose(intsockfd);

  30. Function Call (cont.) • close() • Ex: #include <unistd.h> int close(intsockfd); 傳回值: 成功:傳回 0。 失敗:傳回-1。

  31. Outline • Introduction • Function Call • Design

  32. Design • 設計tcp網路程式 • TCP client端 • 1.建立socket(使用socket()函數) • 2.向server要求連線(使用connect()函數) • 3.若連線成功,使用輸出入函數和server端互傳訊息 • 4.關閉socket,結束連線(使用close()函數) • TCP server端 • 1.建立socket(使用socket()函數) • 2.連結socket(使用bind()函數) • 3.開啟listening socket(使用listen()函數) • 4.等待client連線要求(使用accept()函數) • 5.若連線成功,使用輸出入函數和client端互傳訊息 • 6.關閉socket,結束連線(使用close()函數)

  33. Design (cont.) • TCP程式設計流程

  34. Thanks

More Related