网络基础编程:
网络基础编程主要介绍传输层中的TCP和UDP协议,TCP和UDP是两种不同的网络传输方式。
1、TCP
通常应用程序通过打开一个socket来使用TCP服务,TCP管理到其他socket的数据传递。可以说,通过IP源/目的可以唯一的区分网络中两个设备的关联,通过socket的源/目的可以唯一的区分网络中两个应用程序的关联。
三次握手协议:
TCP对话通过三次握手来初始化,三次我是的目的是使数据段的发送和接收同步;告诉其他主机其一次可接收的数据量,并建立虚连接。下面简单描述了三次握手的过程:
1、初始化主机通过一个同步标志置位的数据段发出会话请求;
2、接收主机通过发回具有以下项目的数据段表示回复:同步标志置位、即将发生的数据段的起始字节的顺序号、应答并带有将受到的下一个数据段的字节顺序号。
3、请求主机再回送一个数据段,并带有确认顺序号和确认号。
TCP实体所采用的基本协议是滑动窗口协议。当发送方传送一个数据报时,它将启动计时器。当该数据报到达目的地后,接收方的TCP实体将回送一个数据报,其中包含有一个确认序号,它的意思是希望收到下一个数据报的顺序号。如果发送方的定时器在确认信息到达之前超时,那么发送发重发该数据报。
2、UDP
UDP即用户数据报协议,它是一种无连接协议,因此不需要像TCP那样通过三次握手来建立一个连接。同时,一个UDP应用可以同时作为应用的客户或服务器方。由于UDP协议并不需要建立一个明确的连接,因此建立UDP应用要比建立TCP应用简单得多。UDP比TCP更能更好地解决实时性问题,如今,包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都使用UDP协议。
面向连接的套接字通信(TCP)
1、基于TCP协议编程相关函数说明
socket:用于建立一个socket 连接;
bind:将socket与本机上的一个端口绑定,随后就可以在该端口监听服务请求;
connect:面向连接的客户程序使用connect 函数来配置 socket ,并与远端服务器建立一个TCP连接;
listen:listen函数使 socket 处于被动的监听模式,并为该 socket 建立一个输入数据队列,将到达的服务器
请求保存在此队列中,直到程序处理他们;
accept: accept 函数让服务器接收客户的连接请求;
close:停止在该 socket 上的任何数据操作;
send: 数据发送函数
recv:数据接收函数
————————————————————————————————
socket函数语法:
所需头文件: #include<sys/socket.h>
函数原型:int socket (int family,int type,int protocol)
函数传入值:family协议族:AF_INET等
type:套接字类型:SOCK_STREAM,SOCK_DGRAM,SOCK_RAW
protocol:0
函数返回值:成功:非负套接字描述符,失败:-1
————————————————————————————————
bind函数语法:
所需头文件:同上;
函数原型: int bind (int sockfd,struct sockaddr *my_addr,int addrlen)
函数传入值: sockfd:套接字描述符
my_addr:本地地址
addrlen:地址长度
函数返回值:成功,0;失败,-1
————————————————————————————————
listen函数语法:
所需头文件:同上
函数原型: int listen (int sockfd,int backlog)
函数传入值:sockfd,套接字妙手
backlog,请求队列中允许的最大请求数;
返回值:成功,0;失败,-1
————————————————————————————————
accept函数语法:
函数原型:int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen)
函数传入值:sockfd,套接字描述符
addr,客户端地址
addrlen:地址长度
函数返回值:成功,0;失败,-1
————————————————————————————————
connect函数语法:
函数原型:int connect(int sockfd,struct sockaddr *serv_addr,int addrlen)
函数传入值:serv_addr:服务器端地址
返回值:同上
send函数语法:
函数原型:int send (int sockfd,const void *msg,int len ,int flags)
函数传入值:msg,指向要发送数据的指针
len,数据长度
flags,一般为0
函数返回值:同上
————————————————————————————————
recv函数语法:
函数原型:int recv(int sockfd,void *buf,int len,unsigned int flags)
函数传入值:buf,存放接收数据的缓冲区
len,数据长度
flags:一般为0
返回值,同上。
————————————————————————————————
这节就讲这么多,下节继续网络编程的实例分析。^_^