版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、網路程式設計-Socket程式設計,蔡進義 .tw,2,大綱,TCP/IP協定複習 什麼是Socket Socket API的使用 Socket相関資料的結構 常用Socket API,3,TCP / IP協定複習,What is TCP / IP Transmission Control Protocol / Internet Protocol,網路存取層,網路層,傳輸層,應用層,Network Access,Network,Transport,Application,FTP , SMTP , Telnet , DNS , SNMP,TCP , UD
2、P,IP , ARP,Ethernet , FDDI , Token Ring,4,Port(埠),每一台主機有65536個ports port 0 port 65535 一些保留的ports 20, 21: FTP 23: Telnet 80: HTTP 未保留 1024 5000,Port 3333,Port 80,5,大綱,TCP/IP協定複習 什麼是Socket Socket API的使用 Socket相関資料的結構 常用Socket API,6,什麼是Socket?,Socket首次出現在Berkeley UNIX中,作為網路設計TCP/IP的橋樑 Socket是一個簡單的應用程式介
3、面(Application Programming Interface, API) Socket使發展網路程式變得比較簡單。目前,Socket已成為最通用的網路設計介面了。 Berkeley Socket Interface是一組interface function,介於網路應用程式和作業系統及網路硬體之間,用以提供標準的函數,應用程式可透過呼叫Socket interface以發展TCP/IP的網路應用程式。 BSD ( Berkeley Software Distribution ) Socket WinSock,LINK,7,應用程式與Socket關係,應用程式1,應用程式2,應用程式3
4、,應用程式4,網路程式介面API (BSD Socket或Win Sock),TCP/IP,作業系統,網路卡,8,Socket概念,Socket的概念和檔案代碼觀念相似,一個Socket就是一個通訊點,以一個整數來表示之。 Socket並不是TCP或UDP的port number Socket只是一個代碼代表網路協定中的一組資料 TCP連線中雙方的IP位址 目前連線的狀態,9,Socket Descriptor,Socket(整數),10,TCP或UDP,AP1,AP2,AP3,AP3,11,大綱,TCP/IP協定複習 什麼是Socket? Socket API的使用 Socket相關的資料結
5、構 主要的Socket API,12,Socket(連結導向), TCP,建立連線,Client,Server,13,write(),write(),read(),read(),使用write()及read()來傳送與接收資料,14,Socket(非連結導向), UDP,socket(),bind(),sendto(),recvfrom(),sendto(),Client,Server,socket(),bind(),recvfrom(),15,Client/Server模型,Client端: Client開啟一個socket並且使用一個port Client使用connect以建立連結 TC
6、P要經過三向交握 Client使用read/write system call對開啟的socket做讀寫的動作 關閉socket以結束連結,16,open socket由作業系統如同檔案一般取得一Socket Descriptor,讓Client 端以後可使用這一代號進行網路I/O讀寫。 bind 是指定 Client 端使用local (也就是本機) 的哪一IP及 Port 進行通訊。若無指定,則連線時由系統幫 Client 程式自動挑選合適的 IP 與 Port。因此對 Client 端而言是 Optional。 connect 是起始 TCP 的連線,配合 Server 端的 accep
7、t System Call完成三向交握,因此於 connect 此 System Call 必需傳給予對方 Server 端的 IP 與 Port 的資訊。 read/write 針對已經完成連線的 Socket Descriptor 進行 I/O 動作,在此傳送 HTTP的Protocol並得到 Server 回傳的 HTML 檔案內容等。 close 關閉TCP連線,釋放系統資源。,socket(),bind(),connect(),read() write(),close(),17,Client/Server模型,Server端: Server開啟一個socket並佔用一個port 使s
8、ocket進入被動模式來等待client的連結 Server及client利用read/write system call進行對開啟的socket做讀寫的動作 關閉socket以結束連結,18,open socket由作業系統如同檔案一般取得一Socket Descriptor,讓Server端以後可使用這一代號進行接受外來TCP連線。 bind 是指定 Server端使用local 的哪一IP及 Port 進行通訊。對Server端而言是必需的。 listen 表示讓此開啟的 Socket 進入被動模式,配合 accept System Call可接受外來之連線。 Server 端的 acc
9、ept System Call接受Client 之 connect System Call 完成三向交握,並產生一新的 Descriptor,此 Descriptor即為與Client 進行 I/O 的代號。 read/write 針對已經accept 產生之Descriptor 進行 I/O 動作,在此傳送 HTTP的Protocol並得到 Server 回傳的 HTML 檔案內容等。 close 關閉TCP連線,釋放系統資源。,socket(),bind(),listen(),read() write(),close(),accept(),19,範例(Client端) 1/2,/建立soc
10、ket,若成功傳回socket descriptor,若傳回-1表error if(sockfd=socket(AF_INET, SOCK_STREAM, 0) = -1) printf(Socket Error:%san, strerror(errno); printf(Socket Error:%san, strerror(errno); exit(1); /填入family, address, port,另外,其他地方要填入0(使用bzero() function) bzero(char*) ,20,範例(Client端) 2/2,/送資料(hello字串)給Server if(writ
11、e(sockfd, hello, strlen(hello) = -1) printf(Write Error:%sn, strerror(errno); exit(1); /從Server收資料 if(nbytes=read(sockfd, buffer, 1024) = -1) printf(Read Error:%sn, strerror(errno); exit(1); buffernbytes = 0; printf(I am Client. I have received from Server:%sn, buffer); close(sockfd); exit(0);,21,範例
12、(Server端) 1/3,/建立socket,若成功傳回socket descriptor,若傳回-1表error if(sockfd=socket(AF_INET,SOCK_STREAM,0) = -1) printf(Socket error:%sna, strerror(errno); exit(1); /填入family, address, port,另外,其他地方要填入0(使用bzero() function) bzero(char*) ,22,範例(Server端) 2/3,/進入被動狀態,等待連線 if(listen(sockfd,5) = -1) printf(Listen
13、error:%sna, strerror(errno); exit(1); while(1) sin_size = sizeof(struct sockaddr_in); /接受連線,並產生一個新的socket(new_fd),傳回-1表失敗 /其中client的address將放在client_addr中 if(new_fd=accept(sockfd, (struct sockaddr *)(,23,範例(Server端) 3/3,/將資料讀進放入buffer陣列中 if(nbytes=read(new_fd, buffer, 1024) = -1) printf(Read Error:%
14、sn, strerror(errno); exit(1); buffernbytes = 0; printf(I have received:%sn, buffer); /把hello字串的資料傳回client if(write(new_fd, hello, strlen(hello) = -1) printf(Write Error:%sn, strerror(errno); exit(1); close(new_fd); close(sockfd); exit(0);,24,25,大綱,TCP/IP協定複習 什麼是Socket? Socket API的使用 Socket相關的資料結構 主要
15、的Socket API,26,Socket相關資料結構,struct sockaddr struct sockaddr_in struct in_addr struct hostent struct servent struct protoent,27,sockaddr, /一般化的位址 struct sockaddr u_short sa_family; /* type of address, AF_INET, AF_INET (Internet protocol address family) */ char sa_data14; /* value of address, specifie
16、s the address value */ ;,28,sockaddr_in, /IPv4 Socket Address struct sockaddr_in u_short sin_family; /specifies protocol to use, PF_INET for either of TCP or UDP u_port sin_port; /16 bits, network byte order struct in_addr sin_addr; /32 bits, network byte order char sin_zero8; /unused ;,29,一般位址,IPv4
17、 Socket Address,30,in_addr,/Internet address structure struct in_addr long s_addr; /32-bit(整數) IPv4 address, network byte ordered ;,31,hostent,struct hostent char *h_name; char *h_aliases; int h_addrtype; int h_length; char *h_addr_list; /hptr-h_addr = gethostbyname(“1”); ; #define h_add
18、r h_addr_list0,h_addr_list0,h_addr_list1,h_addr_list,32,servent,struct servent char *s_name; char *s_aliases; int s_port; char *s_proto; ;,33,protoent,struct protoent char *p_name; char *p_aliases; int p_proto; ;,34,大綱,TCP/IP協定複習 什麼是Socket? Socket API的使用 Socket相關的資料結構 主要的Socket API,35,主要的Socket API,
19、socket 建立socket bind 設定socket所使用的local IP及通訊埠 listen 設定socket等待client的連結請求 accept 接受來自client的連結請求,並建立socket連結 recv/read (TCP)接收來自client所傳的資料 recvfrom (UDP)接收來自client所傳的資料 send/write (TCP)傳送資料到client sendto (UDP)傳送資料到client,Server,36,主要的Socket API,socket 建立socket connect 建立與server端socket連線 recv/read
20、(TCP)接收來自server所傳的資料 recvfrom (UDP)接收來自server所傳的資料 send/write (TCP)傳送資料到server sendto (UDP)傳送資料到server,Client,37,int socket(int family, int type, int protocol);,參數: family: Selects the protocol family to be used; defined in ; use PF_INET for TCP or UDP.其他還有PF_UNIX AF_INET IPv4 AF_INET6 IPv6 AF_LOCAL
21、 Unix domain protocols IPC AF_ROUTE Routing sockets appls and kernel AF_KEY Key socket AF_UNIX AF_IMPLINK type: Semantics of desired communication protocol; defined in ; SOCK_STREAM for TCP; SOCK_DGRAM for UDP; others are possible. SOCK_STREAM stream socket SOCK_DGRAM datagram socket SOCK_RAW raw so
22、cket SOCK_PACKET datalink (Linux) protocol: Normally only one per type; defined in /etc/protocols; 6 for TCP, 17 for UDP; Can use 0 (zero) and the socket call will figure out the right protocol to use for the specified type field. 傳回值: Return: return a integer identifier called a handle. (nonnegativ
23、e descriptor if OK, negative number on error) 範例: Example: To create a TCP socket: int sock; sock = socket(PF_INET, SOCK_STREAM, 0);,38,int connect(int s, struct sockaddr *name, int namelen);,參數: s: file descriptor of socket; returned by call to socket. name: address of the socket data structure; mu
24、st fill-in this structure before calling connect. namelen: length of name data structure; sizeof(name). 範例: Example: if(connect(fd, (struct sockaddr*) ,39,int bind(int socket, const struct sockaddr *address, int addrlen);,功能: Server端的TCP或UDP會使用到 連結socket到特定的address (IP address ,40,int listen(int s,
25、int backlog);,if(listen(fd, 5) 0) perror(“listen”); exit(1); ,41,int accept(int s, struct sockaddr *addr, socklen_t *addrlen);,參數: s: the socket the Server is listening to. addr will be the address (IP + port) of the client that sent the connection request. 傳回值: Return: (new) socket for communicatin
26、g with this client. 範例: Example: newfd = accept(fd, (struct sockaddr*) ,42,int send (int socket, char *message, int msg_len, intflags) (TCP) int write(int socket, void *msg, int len); (TCP) int recv (int socket, char *buffer, int buf_len, int flags) (TCP),43,int read(int socket, void *msg, int len);
27、 (TCP),範例: Example: int fd; /* socket descriptor */ char buf512; /* used by read() */ int nbytes; /* used by read() */ if(nbytes = read(newfd, buf, sizeof(buf) 0) perror(“read”); exit(1); ,44,int sendto (int socket, void *msg, int len, int flags, struct sockaddr * to, int tolen ); (UDP),參數: socket:
28、Descriptor identifying a bound socket. msg: Buffer containing the data to be transmitted. len: Length of the data in buf, in bytes. flags: Indicator specifying the way in which the call is made. (usually set to 0) to: Optional pointer to a sockaddr structure that contains the address of the target s
29、ocket. tolen: Size of the address in to, in bytes. 範例: Example: int fd; /* socket descriptor */ struct sockaddr_in srv; /* used by sendto() */ srv.sin_family = AF_INET; srv.sin_port = htons(80); srv.sin_addr.s_addr = inet_addr(“0”); nbytes = sendto(fd, buf, sizeof(buf), 0 , (struct sockaddr*) ,45,int recvfrom(int socket, void *msg, int len, int flags, struct sockaddr *from, int *fromlen); (UDP),範例: Example: int fd; /* socket descriptor */ struct sockaddr_in srv; /* used by bind() */ struct sockaddr_in cli; /* used by recvfrom() */ char buf512; /* used by recvfrom()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-江苏-江苏无损探伤工三级(高级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-江苏-江苏公路养护工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-新疆-新疆热力运行工五级(初级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-新疆-新疆城管监察员五级(初级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-广西-广西造林管护工二级(技师)历年参考题库含答案详解3套试卷
- 楼长消防安全职责图解
- 海外安全检查指南讲解
- 2026年秋季开学高三每天进步一点点复习策略课件
- 2026年秋季开学大学一年级新生军训国防教育安全课件
- 2026年甘肃省临夏回族自治州 临夏市中考数学最后冲刺浓缩卷含解析
- 2026年住院医师规范化培训结业理论考核(助理全科)经典试题及答案
- 2026年中晟弘基(黑龙江)人力资源服务有限责任公司招聘笔试参考题库及答案详解
- 2026-2027学年第一学期“1530”安全教育记录表(秋季)
- 半导体-入珠、扩口工作流程
- 中国结直肠癌手术病人营养治疗指南(2025版)解读
- 农作物种子繁育员考试法律法规知识的试题答案
- 《中华人民共和国预防未成年人犯罪法》知识培训
- 2024-2025学年北京东城区高三(上)期末英语试卷(含答案详解)
- 胸痛中心流程改进培训会
- 人教版九年级数学上册《第一章一元二次方程》单元测试卷-带答案
- 铁路车站岗位职责样本
评论
0/150
提交评论