《套接字socket编程 日文本讲义.pdf》由会员分享,可在线阅读,更多相关《套接字socket编程 日文本讲义.pdf(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、12上流2進整数値順序。Big Endian使用。下位上位Big EndianLittle Endian(Byte Order)2進整数値(IP、長等)上格納順序。以下2通。1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0128102300 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 112810230IP 128.10.2.30Big EndianLittle EndianLittle Endian変換Big EndianBig Endia
2、n312810下位上位Big EndianLittle Endian10128変換変換ntohshtons12810下位上位Big Endian12810230下位上位Big EndianLittle Endian30210128ntohlhtonl12810230下位上位Big Endian4変換変換localshort=ntohs(netshort)short型整数変換netshort:(2)整数localshort:(2)整数network to host shortlocallong=ntohl(netlong)long型整数変換netlong:(4)整数locallong:(4)整数
3、network to host longnetshort=htons(localshort)short型整数変換localhort:(2)整数netshort:(2)整数host to network shortnetlong=htonl(locallong)long型整数変換locallong:(4)整数netlong:(4)整数host to network long5IPIP操作操作(1)(1)address=inet_addr(string)address=inet_network(string)IP返却IP返却付10進表現IP32表現IP変換char *string:付10進表現IP
4、(文字列)in_addr_t address:32表現IP(整数)result=inet_aton(string,inaddrPointer)char *string:付10進表現IP(文字列)struct in_addr *inaddrPointer:in_addr 構造体(32表現IP(整数)int result:実行結果(有効:0以外、無効:0)10000000 00001010 00000010 00011110128.10.2.30付10進表現(文字列)32表現inet_addr,inet_networkinet_atonstruct in_addrin_addr_t s_addr;
5、typedef unsigned int in_addr_t;6IPIP操作操作(2)(2)str=inet_ntoa(internetaddr)32表現IP付10進表現IP変換struct in_addr internetaddr:in_addr 構造体(32表現IP(整数)char *str:付10進表現IP(文字列)10000000 00001010 00000010 00011110128.10.2.30付10進表現(文字列)32表現inet_ntoa7IPIP操作操作(3)(3)連結連結internetaddr=inet_makeaddr(net,local)net:32表現loca
6、l:整数表現internetaddr:32表現IPIP部分部分分割部分部分分割net=inet_netof(internetaddr)internetaddr:32表現IPnet:32表現local:整数表現local=inet_lnaof(internetaddr)IP128.10.2.2128.10.0.00.0.2.2inet_makeaddrinet_netofinet_lnaofB(実際32表現)8(socket):通信通信処理用端点(出入口):通信通信処理用端点(出入口)対、読取、書込可能特定相手対応、生成可能使相手与(UDP)相手対応、使相手指定(TCP)組双方向通信形成子親引継
7、参照回数管理、参照、廃棄fd=create()記述子sd1=socket()read(fd)/write(fd)recv(sd1)/send(sd1)記述子sd2=socket()send(sd2)/recv(d2)生成生成格納手段抽象化格納手段抽象化通信手段抽象化通信手段抽象化fd=open()9TCPTCP利用利用socketbindlistenacceptsend/recvclosesocketconnectsend/recvclose生成自身、番号設定受付用待行列(窓口)設定受付開始生成、番号指定、要求確立送受信消去消去側側10UDPUDP利用利用socketbindrecvfroms
8、endtorecvfromclose側socketbindsendtorecvfromsendtoclose側生成自身、番号設定消去、番号指定、送信送受信送信受信、番号取得11生成、消去生成、消去sockdes=socket(pf,type,protocol)生成生成(、相手無関係生成)int pf:int type:通信型PF_INET:TCP/IPPF_APPLETALK:AppletalkPF_LOCAL:(同一内間通信)int protocol:(0指定選択。TCP,UDP0可)SOCK_STREAM:配送SOCK_DGRAM:配送SOCK_RAW:低用int sockdes:記述子(
9、整数)終了(消去)終了(消去)close(sockdes)int sockdes:記述子参照0、消滅(定義/usr/include/bits/socket.h)12設定設定bind(sockdes,(struct sockaddr*)&localaddr,addrlen)int sockdes:記述子struct sockaddr_in localaddr:指定sockaddr_in構造体socklen_t addrlen:sockaddr_in構造体int 戻値:処理結果(正常時1、異常時-1)0-12-56-910-13AF-INET(2)番号IP未使用(0)未使用(0)sockaddr構
10、造体TCP/IPsockaddr構造体(sockaddr_in)INADDR_ANY指定持任意対、送受信番号0指定、番号割当自身自身IP()、番号結合()、番号結合(注)socklen_t int 同13sockaddr_insockaddr_in構造体設定構造体設定struct sockaddr-insa_family_tsin_family未使用(0)in_port_tsin_portstruct in_addr sin_addr未使用(0)struct sockaddr-in 名前;名前.sin_family=AF_INET;名前.sin_port=htons(0);名前.sin_add
11、r.s_addr=htonl(INADDR_ANY);struct sockaddr-in 名前;名前.sin_family=AF_INET;名前.sin_port=htons(番号);名前.sin_addr.s_addr=inetaddr();見(定義/usr/include/netinet/in.h)typedef unsigned short int sa_family_t;typedef unsigned short int in_port_t;in_addr_t s_addrstruct in_addrtypedef unsigned int in_addr_t;struct soc
12、kaddr-in 名前;名前.sin_family=AF_INET;名前.sin_port=htons(番号);名前.sin_addr.s_addr=htonl(INADDR_ANY);14connect(sockdes,(struct sockaddr*)&destaddr,addrlen)相手相手IP、番号結合、番号結合相手設定相手設定int sockdes:記述子struct sockaddr_in destaddr:相手指定sockaddr_in構造体socklen_t addrlen:sockaddr_in構造体int 戻値:処理結果(正常時1、異常時-1)AF_INET(TCP/I
13、P)場合(1)配送(TCP)(2)配送(UDP)相手結、TCP張相手結(UDP場合、connect 必須)15待行列指定待行列指定listen(sockdes,qlength)受付準備、対応待行列設定受付準備、対応待行列設定int sockdes:記述子int qlength:要求待行列長int 戻値:処理結果(正常時1、異常時-1)qlength個要求待行列入待行列一杯、新要求破棄要求R1要求R2要求Rn待行列listen要求16受付受付newsock=accept(sockdes,(struct sockaddr*)&addr,&addrlen)int sockdes:要求待記述子stru
14、ct sockaddr_in addr:格納sockaddr_in構造体socklen_t addrlen:sockaddr_in構造体int newsock:新対応記述子(異常時-1)要求受付、持生成要求受付、持生成17acceptaccept受付送受信新生成要求(connect)新閉acceptfork送受信閉新閉設定設定accept受付新生成(新持)本体本体要求受付自身送受信行場合要求受付自身送受信行場合要求対応送受信生成場合要求対応送受信生成場合要求(connect)18送信送信send,write,writevsendto,sendmsg型送信型型送信write(sockdes,me
15、ssage,length)sockdes:記述子message:送信格納域length:送信数writev(sockdes,iovector,vectorlen)sockdes:記述子iovector:送信格納用iovec型配列vectorlen:iovector数1(32)1長(32)n(32)n長(32)vectorlen:niovectoriovec型配列離散送信19送信送信mlength=send(sockdes,message,length,flags)int sockdes:記述子char message:送信格納域(message:格納域)size_t length:送信数int
16、 flags:転送制御(緊急、)int mlength:送信(異常時-1)mlength=sendto(sockdes,message,length,flags,(struct sockaddr*)&destaddr,addrlen)int sockdes:記述子char message:送信格納域(message:格納域)size_t length:送信数int flags:転送制御(緊急、)struct sockaddr_in destaddr:受信側格納sockaddr_in構造体socklen_t addrlen:sockaddr_in構造体int mlength:送信(異常時-1)(
17、注)size_t int 同20送信送信sendmsg(sockdes,messagestruct,flags)sockdes:記述子messagestruct:messagestruct構造体flags:転送制御(緊急、)sockaddrsockaddriovec配列iovector数権配列権配列数messagestruct構造体IP、番号送信格納域21受信受信read,readv,recvrecvfrom,recvmsg型受信型型受信read(sockdes,buffer,length)sockdes:記述子buffer:受信格納域length:格納域readv(sockdes,iovec
18、tor,vectorlen)sockdes:記述子iovector:受信格納用iovec型配列vectorlen:iovector数離散域読込mlength=recv(sockdes,buffer,length,flags)int sockdes:記述子char buffer:受信格納域(buffer:格納域)size_t length:格納域int flags:受信制御(読取行、受信内容見)int mlength:受信(異常時-1)22mlength=recvfrom(sockdes,buffer,length,flags,fromaddr,addrlen)int sockdes:記述子ch
19、ar buffer:受信格納域(buffer:格納域)size_t length:格納域int flags:受信制御(読取行、受信内容見)struct sockaddr_in fromaddr:送信側指定sockaddr_in構造体socklen_t addrlen:sockaddr_in構造体int mlength:受信(異常時-1)受信受信recvmsg(sockdes,messagestruct,flags)sockdes:記述子messagestruct:messagestruct構造体flags:受信制御(読取行、受信内容見)23付取得付取得相手先()取得相手先()取得getpeer
20、name(sockdes,(struct sockaddr*)&destaddr,&addrlen)int sockdes:記述子struct sockaddr_in destaddr:相手先格納sockaddr_in構造体socklen_t addrlen:sockaddr_in構造体取得取得getsockname(sockdes,(struct sockaddr*)&localaddr,&addrlen)int sockdes:記述子struct sockaddr_in localaddr:格納sockaddr_in構造体socklen_t addrlen:sockaddr構造体相手先()
21、IP、番号getpeername獲得24付情報取得、設定付情報取得、設定情報取得情報取得getsockopt(sockdes,level,optionid,optionval,length)sockdes:対象記述子level:情報種別()optionid:種別optionval:情報格納域length:情報長情報設定情報設定setsockopt(sockdes,level,optionid,optionval,length)sockdes:対象記述子level:情報種別()optionid:種別optionval:設定情報格納域length:設定情報長時間、可否、帯域外制御25指定記述子(記
22、述子、記述子)、読取可能、書込可能、例外状態示。記述子指定状態場合、記述子少1指定状態、最大待時間範囲内待。入出力状態入出力状態nready=select(ndesc,indesc,outdesc,excdesc,timeout)ndesc:調記述子数(検査記述子0ndesc-1対実施)indesc:読込可能否検査対象記述子示outdesc:書込可能否検査対象記述子示excdesc:例外状態否検査対象記述子示timeout:記述子1指定状態待時間示整数nready:指定状態記述子数timeout値0()場合、記述子少1指定状態待続timeout値0遅延0、現在入出力状態付複数対処付複数対処26
23、付複数対処付複数対処01複数張1110012340111001234読取書込0100000010select記述子記述子1読取可能記述子3書込可能12indesc,outdesc,excdesc、読取可能、書込可能、例外状態記述子通知3必要数生成select送受信可能調送受信27付名、名設定、取得付名、名設定、取得gethostname(name,length)sethostname(name,length)name:名格納域length:格納域name:名格納域length:名長特権名設定特権名設定名取得名取得getdomainname(name,length)setdomainname(n
24、ame,length)name:名格納域length:格納域name:名格納域length:名長特権名設定特権名設定名取得名取得例:k604p2.is.oit.ac.jp名名28付情報取得付情報取得ptr=gethostbyname(namestr)ptr=gethostbyaddr(addr,len,type)名情報取得名情報取得IP情報取得情報取得namestr:名示文字列ptr:情報格納用hostent構造体正式名別名型(AF_INET)長hostent構造体addr:格納域len:長type:型ptr:情報格納用hostent構造体29ptr=getnetbyname(name)nam
25、estr:名示文字列ptr:情報格納用netent構造体情報取得情報取得ptr=getnetbyaddr(netaddr,addrtype)netaddr:32表現addrtype:型ptr:情報格納用netent構造体付、情報取得付、情報取得ptr=getprotobyname(name)name:名示文字列ptr:情報格納用protoent構造体情報取得情報取得ptr=getprotobynumber(number)number:番号ptr:情報格納用protoent構造体正式名別名型(AF_INET)netent構造体正式名別名番号protoent構造体30付情報取得付情報取得ptr=getservbyname(name,proto)name:名示文字列proto:番号(TCPUDP)ptr:情報格納用servent構造体名情報取得名情報取得ptr=getservbyport(port,proto)port:番号proto:番号(TCPUDP)ptr:情報格納用servent構造体番号情報取得番号情報取得正式名別名番号識別子servent構造体