预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共29页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Linux网络编程之TCP(上)1.TCP通信流程TCP网络编程主要是用套接字来实现网络效劳器与客户端通信,一个标准的套接字是由协议族,IP地址与端口号组成,它是TCP效劳器与客户端通信的根底,TCP的效劳器端流程:(1)建立套接字(socket)(2)将地址结构绑定到套接字上(bind)(3)监听本地端口,设置监听队列的长度,效劳器将不能同时处理多个请求,将不能处理的请求放入等待队列中(listen)(4)接受客户端的请求,返回客户端套接字描述符,效劳器与客户端利用这个新的描述符进行传输数据(accept)(5)数据传输(read,write)(6)关闭套接字(close)TCP客户端流程:(1)建立套接字(socket)(2)连接目标效劳器(connect)(3)数据传输(read,write)(4)关闭客户端套接字(close)这样,就可以实现效劳器与客户端通信了.2.相关数据结构(1)通用套接字地址类型structsockaddr{sa_family_tsa_family;//协议族chardata[14];//协议数据}typedefunsignedshortsa_family以太网中常用的地址结构:structsockaddr_in{u8sin_len;//structsockaddr_in的长度u8sin_family;//协议族u16sin_port;//端口号structin_addrsin_addr;//32位IP地址charsin_zero[8];//没使用}structin_addr{u32s_addr;//32位地址};(2)相关函数#include<sys/socket.h>#include<sys/types.h>intsocket(intdomain,inttype,intprotocol);参数:domain-通信的域,AF_INET表示IPV4协议,PF_INET6表示IPV6协议type-设置套接字通信的类型SOCK_STREAM流式套接字,SOCK_DGRAM数据报套接字,SOCK_RAW原始套接字protocol-表示某个通信类型的特定类型,如果type只有一个类型,那么这个参数设置为0返回值:成功返回套接字描述符,失败返回-1#include<sys/types.h>#include<sys/socket.h>intbind(intsockfd,conststructsockaddr*my_addr,socket_taddrlen);参数:sockfd-套接字描述符my_addr-sockaddr指针类型,指向一个套接字的地址结构addrlen-地址结构的长度返回值:成功绑定返回0,失败绑定返回-1#include<sys/socket.h>intlisten(intsockfd,intbacklog);参数:sockfd-套接字描述符backlog-等待队列的长度返回值:成功返回0,失败返回-1#include<sys/types.h>#include<sys/socket.h>intaccept(intsockfd,structsockaddr*addr,socklen_t*addrlen);参数:sockfd-套接字描述符addr-指向地址结构的指针addrlen-地址结构的长度指针其中addr包含的是客户端的地址结构,包括客户端的IP,端口号,协议族等等.返回值:成功返回的是用于效劳器与客户端通信的套接字描述符,失败返回-1#include<sys/types.h>#include<sys/socket.h>intconnect(intsockfd,structsockaddr*addr,intaddrlen);参数:sockfd-客户端套接字描述符addr-需要连接的效劳器的地址结构addrlen-效劳器的地址结构的长度返回值:连接成功返回0,失败返回-1#include<sys/socket.h>close(ints);参数:s-套接字描述符返回值:成功关闭套接字返回0,失败返回-13.TCP通信的实例效劳器端:#include<stdio.h>#include<stdlib.h>#include<strings.h>#include<sys/types.h>#include<sys/socket.h>#include<unistd.h>#include<linux/in.h>#definePORT8888#defineBACKLOG2//效劳器端程序/**(1)建立一个套接字描述符,定义网络类型,协议类型和具体的协议标号socket()(2)将套接字与具体的地址结构绑定,这个地址结构包括端口号,IP地址,网络类型bind()(3)侦听客户端发出的请求,设置队列的长度li