Socket () and TCP client-server
Outline TCP client-server 架構和TCP socket TCP socket function
TCP client-server client server 建立socket 連結socket 開啓listening socket 收到連線要求後並確定連線成功使用I/O函數互傳訊息 建立socket 通知server 要求連線 連使用線成功後I/O函數和SERVER 互傳訊息
TCP socket function 建立和連結函數:socket , bind 建立 listening socket: listen 接收連線要求函數:accept 連線建立和中断函數:connect , close 讀寫(I/O):read , write
sock = socket(AF_INET, SOCK_STREAM, 0); (1/5) 1.開啟 Socket介面:Socket 就如同傳輸管道的出入口,建立傳輸應用的兩端點須各自開啟一Socket,往後的資料傳送,均依賴 read(送入此Socket)或 write (由Socket讀出) 資料。需給AF_INET(socket family)、SOCK_STREAM (socket type)、protocoltype等參數。 sock = socket(AF_INET, SOCK_STREAM, 0);
(2/5) 2.Binding Socket地址:Socket 出入口需Binding到TCP address,網路上的電腦主 機才可以依據使用者所指定的TCP address,建立資料傳送的通道。TCP address 包含IP address (如140.115.17.111) 及TCP Port number。我們熟悉的網路應用: telnet 140.115.17.111 23與ftp 140.115.17.111 21,均需依據所指定的 host IP與 Port,建立連接、傳輸資料。 name.sin_family = AF_INET; name.sin_addr.s_addr = INADDR_ANY; name.sin_port = 5000; bind(sock, (struct sockaddr *)&name, sizeof name)
(3/5) 3.Connection的建立:電腦主機可以使用Binding TCP address後的Sock et,建立資 料傳送通道。Server/Client 的傳輸模式,Server 端需呼叫accept() 功能,等待Client的連接建立要求。Client端則呼叫connect()功能,要求與Server主機建立連接通道。 msgsock = accept(sock,(struct sockaddr *)0, (int *)0); connect(sock, (struct sockaddr *)&server, sizeof server)
(4/5) 4.傳輸網路資料:Client與Server主機間成功地建立連接通道後。兩端均可藉由各自的Socket出入口,read 或write 資料到對方。 rval = read(msgsock,buf,sizeof(buf)) wrval=write(msgsock,buf,sizeof(buf))
(5/5) 5.關閉 Socket介面:當應用程式不再使用Socket 出入口做資料傳送時 ,需關閉Socket close(sock)
server Socket() Bind() client Listen() Socket() Accept() 連線建立 等待連線要求 Connect() Read() 要求資料 Write() Write() 連線結束恢復等待 回覆資料 Read() Read() 告知傳輸結束 Close() Close()
參考網址 http://content.edu.tw/primary/info_edu/cy_sa/report/more/8611a8.htm http://dslab.cis.thu.edu.tw/course/network/netprog/sockets/socket.htm