《第四章 基本套接字编程.pdf》由会员分享,可在线阅读,更多相关《第四章 基本套接字编程.pdf(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Linux 网络编程基本套接字编程陕西师范大学计算机科学学院何聚厚陕西师范大学计算机科学学院何聚厚2008.52008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程应用程序和应用层协议?Application:communicating,distributed processes?Running in network hosts in“user space”?Exchange messages to implement app?e.g.,email,file transfer,
2、the Web?Application-layer protocols?One“piece”of an app?Define messages exchanged by apps and actions taken?User services provided by lower layer protocols2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程应用程序和应用层协议applicationtransportnetworkdata linkphysicalappli
3、cationtransportnetworkdata linkphysicalapplicationtransportnetworkdata linkphysical2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程C/S 模式?Typical network app has two pieces:clientand serverClient:?Initiates contact with server(“speaks first”)?Typically requests
4、service from server,?For Web,client is implemented in browser;for e-mail,in mail readerapplicationtransportnetworkdata linkphysicalapplicationtransportnetworkdata linkphysicalrequestreply2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程C/S 模式Server:?Provides requ
5、ested service to client?e.g.,Web server sends requested Web page,mail server delivers e-mailapplicationtransportnetworkdata linkphysicalapplicationtransportnetworkdata linkphysicalrequestreply2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程传输层服务要求Data loss?Some
6、apps(e.g.,audio)can tolerate some loss?Other apps(e.g.,file transfer,telnet)require 100%reliable data transfer Timing?Some apps(e.g.,Internet telephony,interactive games)require low delay to be“effective”Bandwidth?Some apps(e.g.,multimedia)require minimum amount of bandwidth to be“effective”?Other a
7、pps(“elastic apps”)make use of whatever bandwidth they get 2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程传输层服务要求no lossno lossno lossloss-tolerantloss-tolerantloss-tolerantno losselasticelasticelasticaudio:5Kb-1Mbvideo:10Kb-5Mbsame as above few Kbpselasticnono
8、noyes,100s msecyes,few secsyes,100s msecyes and nofile transfere-mailweb documentsreal-time audio/videostored audio/videointeractive gamesfinancial appsApplicationData lossBandwidthTime Sensitive2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程Server and Client?S
9、erver and Client exchange messages over the network through a common Socket APITCP/UDPIPEthernet AdapterServerTCP/UDPIPEthernet AdapterClientsSocket APIhardwarekernel spaceuser spaceports2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程UDP?UDP?Single socket to re
10、ceive messages?No guarantee of delivery?Not necessarily in-order delivery?Datagram independent packets?Must address each packet?Example UDP applications?Multimedia,voice over IP2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP?TCP?Reliable guarantee delivery?B
11、yte stream in-order delivery?Connection-oriented single socket per connection?Setup connection followed by data transfer?Example TCP applications?Web,Email,Telnet2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程端口号?Port numbers are used to identify“entities”on a
12、host?Port numbers can be?Well-known(port 0-1023)?Dynamic or private(port 1024-65535)?Servers/daemons usually use well-known ports?Any client can identify the server/service?HTTP=80,FTP=21,Telnet=23,.?/etc/service defines well-known ports?Clients usually use dynamic ports?Assigned by the kernel at ru
13、n time2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程端口号TCP/UDPIPEthernet AdapterNTPdaemonWeb serverport 123port 802008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程IP地址和域名地址?Each attachment point on Internet is given unique
14、address?Based on location within network like phone numbers?Humans prefer to deal with names not addresses?DNS provides mapping of name to address?Name based on administrative ownership of host2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程Internet 地址数据结构?struc
15、t sockaddr unsigned short sa_family;/*地址,AF_xxx*/char sa_data14;/*14 字节的协议地址*/;?sa_family一般为AF_INET;?sa_data则包含该socket的IP地址和端口号。2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程Internet 地址数据结构?sin_family=AF_INET selects Internet address family#include/*Internet a
16、ddress structure*/struct in_addr u_long s_addr;/*32-bit IPv4 address*/;/*network byte ordered*/*Socket address,Internet style.*/struct sockaddr_in u_char sin_family;/*Address Family*/u_short sin_port;/*UDP or TCP Port#*/*network byte ordered*/struct in_addr sin_addr;/*Internet Address*/char sin_zero
17、8;/*unused*/;2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程字节顺序union u_int32_t addr;/*4 bytes address*/char c4;un;/*128.2.194.95*/un.addr=0 x8002c25f;/*c0=?*/?Big Endian?Sun Solaris,PowerPC,.?Little Endian?i386,alpha,.?Network byte order=Big Endian128219495c0
18、c1 c2 c39519421282008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程字节顺序?Internet上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Internet上传输数据时就需要进行转换。上传输数据时就需要进行转换。?字节顺序转换函数:字节顺序转换函数:?h表示表示“host”,n表示表示“network”,s 表示表示“shor
19、t”,转换端口号,转换端口号,l 表示表示“long”,转换转换IP地址地址。#include unsigned long int htonl(unsigned long int hostlong);unsigned short int htons(unsigned short int hostshort);unsigned long int ntohl(unsigned long int netlong);unsigned short int ntohs(unsigned short int netshort);2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科
20、学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程字节顺序?指向指向sockaddr_in的指针和指向的指针和指向sockaddr的指针可以相互转换;的指针可以相互转换;?sin_family通常被赋AF_INET;sin_port和sin_addr应该转换成为sin_family通常被赋AF_INET;sin_port和sin_addr应该转换成为网络字节优先顺序网络字节优先顺序;2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程
21、IP地址转换?有三个函数将数字点形式表示的字符串有三个函数将数字点形式表示的字符串IP地址与地址与32位网络字节顺序的二进制形式的位网络字节顺序的二进制形式的IP地址进行转换地址进行转换:?unsigned long int inet_addr(const char*cp)?该函数把一个用数字和点表示的该函数把一个用数字和点表示的IP地址的字符串转换成地址的字符串转换成网络字节序列网络字节序列一个无符号长整型一个无符号长整型;?如:如:struct sockaddr_in ina;ina.sin_addr.s_addr=inet_addr(202.117.153.80);?该函数成功时:返回转
22、换结果;失败时返回常量该函数成功时:返回转换结果;失败时返回常量INADDR_NONE,该常量,该常量=-1;?二进制的无符号整数二进制的无符号整数-1相当于相当于255.255.255.255,这是一个广播地址,所以在程序中调用,这是一个广播地址,所以在程序中调用inet_addr()时,一定要人为地对调用失败进行处理。()时,一定要人为地对调用失败进行处理。?由于该函数不能处理广播地址,所以在程序中应该使用函数由于该函数不能处理广播地址,所以在程序中应该使用函数inet_aton()().2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Lin
23、ux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程IP地址转换?int inet_aton(const char*cp,structin_addr*inp)?此函数将字符串形式的此函数将字符串形式的IP地址转换成二进制形式的地址转换成二进制形式的网络字节序列网络字节序列的的IP地址;地址;?成功时返回成功时返回1,否则返回,否则返回0,转换后的,转换后的IP地址存储在参数地址存储在参数inp中。中。?char*inet_ntoa(struct in-addr in)?将将32位二进制形式的位二进制形式的IP地址转换为数字点形式的地址转换为数字点形式的IP地址,结果在函数返回
24、值中返回,返回的是一个指向字符串的指针地址,结果在函数返回值中返回,返回的是一个指向字符串的指针.?unsigned long inet_network(const char*addr)?此函数将字符串形式的此函数将字符串形式的IP地址转换成二进制形式的地址转换成二进制形式的主机字节序列主机字节序列的的IP地址;地址;2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程IP地址转换?unsigned long inet_lnaof(struct in-addr in)?将套接
25、口地址中的将套接口地址中的IP地址(地址(网络字节网络字节序列)转换成没有网络位的主机序列)转换成没有网络位的主机ID(主机字节主机字节序列)。序列)。?如:如:ina.sin_addr.s_addr=inet_addr(202.117.153.80);?inet_lnaof(ina.sin_addr)返回:返回:0.0.0.80;?unsigned long inet_netof(struct in-addr in)?将套接口地址中的将套接口地址中的IP地址(地址(网络字节网络字节序列)转换成没有网络位的主机序列)转换成没有网络位的主机ID(主机字节主机字节序列)。序列)。?如:如:ina.
26、sin_addr.s_addr=inet_addr(202.117.153.80);?inet_netof(ina.sin_addr)返回:返回:0.202.117.153(右端对齐的表示方式右端对齐的表示方式);2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程IP地址转换?struct in_addr inet_makeaddr(int net,inthost)?把网络位和主机位合并生成新的把网络位和主机位合并生成新的IP地址;地址;?net 网络位,右端对齐的主机序列
27、;网络位,右端对齐的主机序列;?host 主机位,主机序列。主机位,主机序列。2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程socket(套接字)?A socket is a file descriptor that lets an application read/write data from/to the network?socketreturns an integer(socket descriptor)?fd 0 indicates that an error
28、 occurred?socket descriptors are similar to file descriptors?AF_INET:associates a socket with the Internet protocol family?SOCK_STREAM:selects the TCP protocol?SOCK_DGRAM:selects the UDP protocolint fd;/*socket descriptor*/if(fd=socket(AF_INET,SOCK_STREAM,0)0)perror(“socket”);exit(1);2008年5月3日11时33分
29、2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程socket(套接字)?socket函数原型为:函数原型为:?int socket(int domain,int type,int protocol);?domain参数指定协议族;参数指定协议族;?type 指定指定 socket的类型:的类型:?SOCK_STREAM 或或SOCK_DGRAM;?protocol通常赋值通常赋值“0”。?Socket()调用返回一个整型调用返回一个整型socket描述符,你可以在后面的调用使用它。描述符,你可以在后面
30、的调用使用它。2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP 服务器?For example:web server?What does a web server need to do so that a web client can connect to it?TCPIPEthernet AdapterWeb ServerPort 802008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计
31、算机科学学院 何聚厚 Linux 网络编程TCP 服务器(socket)?Since web traffic uses TCP,the web server must create a socket of type SOCK_STREAM。int fd;/*socket descriptor*/if(fd=socket(AF_INET,SOCK_STREAM,0)0)perror(“socket”);exit(1);?socketreturns an integer(socket descriptor)?fd 0 indicates that an error occurred?AF_INET
32、 associates a socket with the Internet protocol family?SOCK_STREAM selects the TCP protocol2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP 服务器(bind)?一旦通过一旦通过socket调用返回一个调用返回一个socket描述符,应该将该描述符,应该将该socket与本机上的一个与本机上的一个端口相关联。(绑定)端口相关联。(绑定)?bind函数原型为:函数原型为:?int
33、 bind(int sockfd,struct sockaddr*my_addr,int addrlen);?Sockfd是一个是一个socket描述符,描述符,?my_addr是一个指向包含有本机是一个指向包含有本机IP地址及端口号等信息的地址及端口号等信息的sockaddr类型的指针类型的指针;?addrlen常被设置为常被设置为sizeof(struct sockaddr)。?Bind()函数在成功被调用时返回函数在成功被调用时返回0;遇到错误时返回;遇到错误时返回“-1”,并将,并将errno置为相应的错误号。置为相应的错误号。?另外要注意的是,当调用函数时,一般不要将端口号置为小于另
34、外要注意的是,当调用函数时,一般不要将端口号置为小于1024的值,因为的值,因为11024是保留端口号,可以使用大于是保留端口号,可以使用大于1024中任何一个没有被占用的端口号。中任何一个没有被占用的端口号。2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP 服务器(bind)?Still not quite ready to communicate with a client.int fd;/*socket descriptor*/struct sockaddr_
35、in srv;/*used by bind()*/*create the socket*/srv.sin_family=AF_INET;/*use the Internet addr family*/srv.sin_port=htons(80);/*bind socket fd to port 80*/*bind:a client may connect to any of my addresses*/srv.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(fd,(struct sockaddr*)&srv,sizeof(srv)0)perror(bind)
36、;exit(1);2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP 服务器(listen)?listen()监听是否有服务请求监听是否有服务请求?在服务器端程序中,当在服务器端程序中,当socket与某一端口捆绑以后,就需要监听该端口,以便对到达的服务请求加以处理。与某一端口捆绑以后,就需要监听该端口,以便对到达的服务请求加以处理。?int listen(int sockfd,int backlog);?sockfd是是Socket系统调用返回的系统调用返回的soc
37、ket 描述符;描述符;?backlog指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待指定在请求队列中允许的最大请求数,进入的连接请求将在队列中等待accept()。?Backlog对队列中等待服务的请求的数目进行了限制,大多数系统缺省值为对队列中等待服务的请求的数目进行了限制,大多数系统缺省值为20。当。当listen遇到错误时返回遇到错误时返回-1,errno被置为相应的错误码。被置为相应的错误码。2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP
38、 服务器(listen)?Still not quite ready to communicate with a client.int fd;/*socket descriptor*/struct sockaddr_in srv;/*used by bind()*/*1)create the socket*/*2)bind the socket to a port*/if(listen(fd,5)0)perror(“listen”);exit(1);2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何
39、聚厚 Linux 网络编程TCP 服务器(accept)?accept()连接端口的服务请求。连接端口的服务请求。?当某个客户端试图与服务器监听的端口连接时,该连接请求将排队等待服务器当某个客户端试图与服务器监听的端口连接时,该连接请求将排队等待服务器accept()它。它。?通过调用通过调用accept()函数为其建立一个连接,函数为其建立一个连接,accept()函数将返回一个新的函数将返回一个新的socket描述符,来供这个新连接来使用。描述符,来供这个新连接来使用。?而服务器可以继续在以前的那个而服务器可以继续在以前的那个 socket描述符上监听,同时可以在新的描述符上监听,同时可以
40、在新的socket描述符上进行数据描述符上进行数据send()(发送)和(发送)和recv()(接收)操作;(接收)操作;2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP 服务器(accept)?int accept(int sockfd,void*addr,int*addrlen);?sockfd是被监听的是被监听的socket描述符,描述符,?addr通常是一个指向通常是一个指向sockaddr_in变量的指针,该变量用来存放提出连接请求服务的主机的信息(某台主
41、机从某个端口发出该请求);变量的指针,该变量用来存放提出连接请求服务的主机的信息(某台主机从某个端口发出该请求);?addrten通常为一个指向值为通常为一个指向值为sizeof(struct soc kaddr_in)的整型指针变量。错误发生时返回一个的整型指针变量。错误发生时返回一个-1并且设置相应的并且设置相应的errno值。值。2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP 服务器(accept)?acceptblocks waiting for a co
42、nnectionint fd;/*socket descriptor*/struct sockaddr_in srv;/*used by bind()*/struct sockaddr_in cli;/*used by accept()*/int newfd;/*returned by accept()*/int cli_len=sizeof(cli);/*used by accept()*/*1)create the socket*/*2)bind the socket to a port*/*3)listen on the socket*/newfd=accept(fd,(struct s
43、ockaddr*)&cli,&cli_len);if(newfd 0)perror(accept);exit(1);2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP 服务器(accept)?How does the server know which client it is?cli.sin_addr.s_addr contains the clients IP address?cli.sin_port contains the clients port numbe
44、r?Now the server can exchange data with the client by using readand writeon the descriptor newfd.newfd=accept(fd,(struct sockaddr*)&cli,&cli_len);if(newfd 0)perror(accept);exit(1);2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程Socket I/O:read()?readcan be used
45、with a socket?readblocks waiting for data from the client but does not guarantee that sizeof(buf)is readint fd;/*socket descriptor*/char buf512;/*used by read()*/int nbytes;/*used by read()*/*1)create the socket*/*2)bind the socket to a port*/*3)listen on the socket*/*4)accept the incoming connectio
46、n*/if(nbytes=read(newfd,buf,sizeof(buf)0)perror(“read”);exit(1);2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程Socket I/O:write()?writecan be used with a socketint newfd;/*socket descriptor*/struct sockaddr_in srv;/*used by connect()*/char buf512;/*used by writ
47、e()*/int nbytes;/*used by write()*/if(nbytes=write(newfd,buf,sizeof(buf)0)perror(“write”);exit(1);2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP客户端?For example:web client?How does a web clientconnect to a web server?TCPIPEthernet Adapter2 Web Clients2008年5月
48、3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP客户端(connect)?connect()函数用来与远端服务器建立一个函数用来与远端服务器建立一个TCP连接,其函数原型为:连接,其函数原型为:?int connect(int sockfd,struct sockaddr*serv_addr,int addrlen);?Sockfd是是sockt描述符;描述符;?serv_addr是包含目的机是包含目的机IP地址和端口号的指针。遇到错误时返回地址和端口号的指针。遇到错误时返回-1
49、,并且,并且errno中包含相应的错误码。中包含相应的错误码。?进行客户端程序设计无须调用进行客户端程序设计无须调用bind(),因为这种情况下只需知道目的机器的,因为这种情况下只需知道目的机器的IP地址,而客户通过哪个端口与服务器建立连接并不需要关心,内核会自动选择一个未被占用的端口供客户端来使用。地址,而客户通过哪个端口与服务器建立连接并不需要关心,内核会自动选择一个未被占用的端口供客户端来使用。2008年5月3日11时33分2008年5月3日11时33分陕西师范大学计算机科学学院 何聚厚 Linux 网络编程陕西师范大学计算机科学学院 何聚厚 Linux 网络编程TCP客户端(conne
50、ct)int fd;/*socket descriptor*/struct sockaddr_in srv;/*used by connect()*/*create the socket*/*connect:use the Internet address family*/srv.sin_family=AF_INET;/*connect:socket fd to port 80*/srv.sin_port=htons(80);/*connect:connect to IP Address“10.2.3.50”*/srv.sin_addr.s_addr=inet_addr(“10.2.3.50”