socket编程基本函数

一、TCP流程

                                                  服务器端                    客户端

socket
bind
listen
accept
recv/recvfrom
send/sendto
close
socket
connect
bind
send/sendto
recv/recvfrom
close

二、函数格式

2.1 socket()函数

socket()函数参数
头文件#include <sys/socket.h>
#include <sys/types.h>
函数原型int socket(int domain, int type, int protocol);
函数参数domain:AF_UNIX,AF_LOCAL:本地通信
AF_INET:IPv4协议
AF_INET6:IPv6协议
AF_PACKET:原始套接字
type:SOCK_STREAM:流式套接字TCP
SOCK_DGRAM:数据报套接字UDP
SOCK_RAW:原始套接字
protocol:0(如果type使用的是 SOCK_STREAM或SOCK_DGRAM)
函数返回值成功:套接字描述符
失败:-1

domain:指定通信域
type:指定套接字类型
protocol:附加协议,如果type使用的是 SOCK_STREAM 或者 SOCK_DGRAM此时该参数可以指定为 0

2.2bind()函数

bind()函数参数
头文件#include <sys/socket.h>
#include <sys/types.h>
函数原型int bind(int sockfd, const struct sockaddr* addr, socklen_t addrlen);
函数参数sockfd: socket函数返回的文件描述符
addr:网络信息结构体
addrlen:网络信息结构体的大小
函数返回值成功:0
失败:-1
网络信息结构体
		struct sockaddr {
               sa_family_t sa_family;
               char        sa_data[14];
        }
		上面的结构体不使用,只是为了强转防止编译器警告的
		
		下面的才是我们使用的结构体
		struct sockaddr_in {
		   sa_family_t    sin_family; /* AF_INET */
		   in_port_t      sin_port;   /* 网络字节序的端口号 */
		   struct in_addr sin_addr;   /* IP地址 */
		};
		struct in_addr {
            uint32_t       s_addr;     /* 网络字节序的IP地址 */
        };


2.3listen()函数

listen()函数参数
头文件#include <sys/socket.h>
#include <sys/types.h>
函数原型int listen(int sockfd, int backlog);
函数参数sockfd: socket函数返回的文件描述符
backlog:允许 同时连接到服务器的客户端的个数(设置成 5 或者 10 都可以 只要不是0就行)。
函数返回值成功:0
失败:-1


2.4accept()函数

accept()函数参数
头文件#include <sys/socket.h>
函数原型int accept(int socket, struct sockaddr *restrict address,socklen_t *restrict address_len);
函数参数sockfd: socket函数返回的文件描述符
address:用来保存客户端的网络信息结构体的地址,如果不需要,可以传NULL
address_len:客户端的网络信息结构体的长度,如果不需要,可以传NULL
函数返回值成功:返回一个新的文件描述符,专门用于和该客户端通信
失败:-1


2.5connect()函数

connect()函数参数
头文件#include <sys/socket.h>
#include <sys/types.h>
函数原型int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
函数参数sockfd: socket函数返回的文件描述符
addr:服务器的网络信息结构体的地址
addrlen:addr的长度
函数返回值成功:0
失败:-1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值