【第6章】Socket编程.ppt
文本预览下载声明
* * * * * * Checksum覆盖如图所示 * * * * * * * * * * * * * * AF_INET IPv4; AF_INET6 IPv6; AF_LOCAL UNIX域协议; AF_ROUTE 路由套接口; AF_KEY 密钥套接口 SOCKET_STREAM TCP; SOCKET_DAGRAM UDP; SOCKET_RAW * AF_INET IPv4; AF_INET6 IPv6; AF_LOCAL UNIX域协议; AF_ROUTE 路由套接口; AF_KEY 密钥套接口 SOCKET_STREAM TCP; SOCKET_DAGRAM UDP; SOCKET_RAW * * * * * * * * * * * * * * * 字节序 htons htonl ntohs ntohl 需要协调主机使用的字节序和网络使用字节序 字节序 #include netinet/in.h uint16_t htons(uint16_t host16bitvalue) ; uint32_t htonl(uint32_t host32bitvalue) ; uint16_t ntohs(uint16_t net16bitvalue) ; uint32_t ntohl(uint32_t net32bitvalue) ; Both return: value in network byte order Both return: value in host byte order TCP 编程 socket 套接口的建立 【参数】 family:协议族 AF_INET #include sys/socket.h int socket (int family, int type, int protocol); socket 【参数】(续) type:套接口的类型 SOCK_STREAM 提供TCP套接字 SOCK_DAGRAM 提供UDP套接字 protocol:指示对套接字应使用哪个协议。通常设置为0 【返回值】 如果调用成功,返回非负的套接字描述符,否则返回-1。 socket 【示例】 int tcpSock = socket(AF_INET, SOCK_STREAM, 0) int udpSock = socket(AF_INET, SOCK_DGRAM, 0) bind 为socket分配本地协议地址。 【参数】 sockfd:套接字描述符; address:存储IP地址和端口号的数据结构; addrlen:address参数的长度。 #include sys/socket.h int bind (int sockfd, const struct sockaddr *address, socklen_t addrlen); bind 【返回值】 正确调用返回0,否则返回-1。 【示例】 struct sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(3000); serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); bind(tcpSock, (struct sockaddr*)serverAddr, sizeof(serverAddr)); listen 建立套接口队列 【参数】 sockfd:套接口描述符; backlog:socket队列的最大连接数。 【返回值】 正确调用返回0,否则返回-1。 #include sys/socket.h #int listen (int sockfd, int backlog); accept 等待连接请求。 【参数】 cliaddr :存放客户端协议地址结构,如果对其不感兴趣,可以设为NULL; addrlen :cliaddr指向的地址结构的长度。 #include sys/socket.h int accept (int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen); accept 【返回值】 返回新建的套接口描述符。 connect 连接服务器 【参数】 servaddr :要连接的服务器端协议地址结构; addrlen :servaddr的长度。 #include sys/socket.h int connect(int sockfd,
显示全部