Linux编程(二)------Socket编程

一、套接字
1.在通信过程中,套接字一定是成对出现的(插板和插座)
一个文件描述符指向一个套接字(该套接字内部由内核借助两个缓冲区实现)
Linux编程(二)------Socket编程_第1张图片
网络字节序(大端模式):
小端(PC本地存储):高存高,低存低
大端(网络存储):高存低,低存高
htonl函数:本地------->网络 (IP)
htons函数:本地------->网络 (port)
ntohl函数:网络------>本地(IP)
ntohs函数:网络------>本地(port)
Linux编程(二)------Socket编程_第2张图片

IP地址转换函数:
①int inet_pton(int af, const char *src, void *dst):将“点分十进制”(网络字节序) -> “二进制整数”(本地字节序)

af:AF_INET、 AF_INET6
src:IP地址(点分十进制)
dst:传出,转换后的网络字节序的IP地址
返回值:成功:1
异常:0,说明src指向的不是一个有效地址
失败:-1

②const char *inet_ntop(int af, const void *src, char *dst, socklen_t size):将“二进制整数”(本地字节序)-> “点分十进制”(网络字节序)
af:AF_INET、 AF_INET6
src:网络字节序IP地址
dst:本地字节序(string IP)
size:dst的大小

返回值:成功:dst
失败:NULL
2.sockaddr地址结构:
struct sockaddr_in addr;
addr.sin_family = AF_INET/AF_INET6
addr.sin_port = htons(9527)

int dst
addr.sin_addr.s_addr = inet_pton(AF_INET,“199.24.56.3”,(void*)&dst)
addr.sin_addr.s_addr = INADDR_ANY 取出系统中任意有效的IP地址,二进制类型

3.bind ():TCP服务器端绑定IP与port(端口)
listen():设置同时监听上线
accpet():阻塞监听客户端连接
connect():TCP客户端绑定IP与port
4.函数
①socket()函数
#include
int socket( int domain, int type, int protocol):创建一个套接字
domain:AF_INET/AF_INET6/AF_UNIX
type:SOCK_STREAM/SOCK_DGRAM
protocol:0
返回值:成功:新套接字所对应的文件描述符
失败:-1 errno

②int bind (int sockfd,const struct sockaddraddr,socklen_t addrlen):给socket绑定一个地址结构(IP+port)
sockfd:socket函数返回值
struct sockaddr_in addr
addr.sin_family = AF_INET/AF_INET6
addr.sin_port = htons(9527)
addr.sin_addr.s_addr = INADDR_ANY
addr:(struct sockaddr
)&addr
addrlen:sizeof(addr)地址结构的大小
返回值:成功:0
失败:-1 errno
③int listen(int sockfd,int backlog):设置同时与服务器连接的上限数(同时进行3次握手的客户端数量)
sockfd:socket函数返回值
backlog:上限数量,最大128
返回值:成功:0
失败:-1 errno
④int accept (int sockfd,struct sockaddr*addr,socklen_t addrlen)
sockfd:socket函数返回值
addr:传出参数,成功与服务器建立连接的那个客户端的地址结构(IP+port)
addrlen:传入传出,入:addr大小 出:客户端addr实际大小
返回值:
成功:能与服务器进行数据通信的socket的文件描述符
失败:-1, errno
⑤int connect (int sockfd,const struct sockaddr
addr,socklen_t addrlen)
sockfd:socket函数返回值
addr:传入参数,服务器的地址结构
addlen:服务器的地址结构大小
返回值:
成功:0
失败:-1, errno
如果不使用bind绑定客户端地址结构,采用“隐式绑定”
5.TCP通信流程分析:

server :

  1. socket()

创建socket

  1. bind()

绑定服务器地址结构

  1. listen()

设置监听上限

  1. accept()

阻塞监听客户端连接

  1. read(fd)

读socket获取客户端数据

6.小–大写

toupper ()

  1. write(fd)

  2. close():

client:

  1. socket()

创建socket

  1. connect(); 与服务器建 立连接3. write()

写数据到socket

  1. read()

读转换后的数据。

5.显示读取结果

  1. close()

Linux编程(二)------Socket编程_第3张图片

你可能感兴趣的:(Linux编程(二)------Socket编程)