C/C++教程

套接字socket编程

本文主要是介绍套接字socket编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

socket套接字编程

1.协议

1.1 udp协议:用户数据报协议
特性:无连接,不可靠,面向数据报
应用场景:实时性要求大于安全性要求的场景。
1.2 tcp协议:传输控制协议
特性:面向连接,可靠传输,面向字节流
应用场景:安全性要求大于实时性要求的场景。
1.3在网络通信程序中,通信两端被分为:客户端、服务端。

  • 客户端:通常是指编写程序中主动发起请求,提供给客户的通信端。
  • 服务端:通常是被动接受请求,提供服务的通信端。

客户端是主动发送请求的一端,也意味着客户端必须提前能够知道服务端的地址信息(ip+port)。服务端的地址信息通常是固定的,并且是提前提供给客户端的。

2.udp通信程序的编写与接口

2.1 server:
2.1.1 创建套接字:在内核中创建一个socket结构体

int socket(int domain, int type,int porotocol);

domain:地址域类型——AF_INET:IPV4通信,使用IPV4 的地址结构
type:套接字类型:SOCK_STREAM ; SOCK_DGRAM
porotocol:本次协议类型:IPPROTO_TCP:6;IPPROTO_UDP:17
TCP必须使用SOCK_STREAM;UDP必须使用SOCK_DGRAM。
2.1.2 为套接字绑定地址信息:在创建套接字创建的socket结构体中加入IP+port信息。

  • 告诉操作系统主机收到的哪些数据应接收交给当前的这个socket。
  • 确定发送数据到源端地址信息。
   int bind(int sockfd,struct sockaddr *addr,socklen_t addrlen);

sockfd:创建套接字返回的操作句柄。
addr:当前绑定的地址信息。
addrlen:地址信息长度。
返回值:成功返回0;失败返回-1。
2.1.3 接收数据:当前进程从指定的socket接收缓冲区中取出数据。

ssize_t recvfrom(int sockfd,void *buf,size_t len,int flag,struct sockaddr *srcaddr,socklen_t *addrlen);

sockfd:操作句柄;
buf:空间地址,用于存放接收的数据;
len:要接收的地址长度;
flag:选项标志,默认为0,表示接收阻塞;
srcaddr:本条数据的源端;
addrlen:输入输出参数——指定要接收多长的地址结构,并且返回实际接收的地址数据长度。
返回值:成功返回实际接收到的数据长度;失败返回-1。
2.1.4 发送数据:将要发送的数据放到socket发送缓冲区中,内核选择合适的时候封装发送。

ssize_t sendto(int sockfd,void *data,int len,int flag,struct sockaddr *peeraddr,socklen_t *addrlen);

sockfd:操作句柄;
data:要发送的数据的空间首地址;
len:要发送的数据长度;
flag:选项标志,默认为0,表示接收阻塞;
srcaddr:对端地址信息;
addrlen:地址结构长度。
返回值:成功返回实际发送到的数据长度;失败返回-1。
2.1.5 关闭套接字

int close(int fd);

2.2 client:
2.2.1 创建套接字:在内核中创建一个socket结构体
2.2.2 为套接字绑定地址信息:大部分情况下忽略这一步,在发送数据时,若socket没有绑定地址时,系统会选择合适的地址进行绑定。
2.2.3 发送数据
2.2.4 接收数据
2.2.5 关闭套接字

这篇关于套接字socket编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!