注意 accept connect send recv
socket()
#include
#include
int socket(int family,int type,int protocal);
int family //参数指定所要使用的通信协议
AF_UNIX // Unix 内部协议
AF_INET // Internet 协议
AF_Ns //Xerox NS 协议
AF_IMPLINK //IMP 连接层
int type //指定套接字的类型
SOCK_STREAM//流套字
SOCK_DGRAM//数据报套字
SOCK_RAW //未加工套接字
SOCK_SEQPACKET//顺序包套接字
int protocal //参数常设置为 0
//socket()系统调用返回一个整数值,叫做套接字描述字 sockfd
//失败 返回-1
bind()
#include
#include
int bind(int sockfd,struct sockaddr *myaddr,int addrlen);
//这个调用将一个名字命名给一个没有名字的套接字
//第二个参数 myaddr 是指向一个特定协议地址的指针
//第三个参数是这个地址结构的大小
//bind()有三个作用:
//服务器在系统里登记它们的地址
//客户为它自己注册一个地址
//一个没有连接的客户确保系统固定分配给它一个唯一的地址
//成功返回0 失败返回-1
connect()
#include
#include>sys/socket.h>
int connect(int sockfd,struct sockaddr *servaddr,int addrlen);
//客户端调用
//sockfd 调用socket函数产生的
//servaddr 服务器的信息
//这个过程在 socket()调用后,将一个套接字描述符和一个与服务器建立的 连接的联系
//成功返回0 失败返回-1
客户端调用
sockfd 调用socket函数产生的
servaddr 服务器的信息
listen
#include
#include
int listen(int sockfd,int backlog);
//面向连接的服务器使用这个系统调用,来表示它希望接受连接
//这个系统调用通常在 socket()和 bind()之后,在 accept()调用之前调用
//参数 backlog 表示当它们等待执行 accept()系统调用之前
//系统能对多少个连 接请求进行排队
accept()
#include
#include
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
//服务器调用
//sockfd 前面服务器端已经bind 的socket描述符
//addr 传出参数 返回链接客户端地址信息 含IP 和 端口号
//传入传出参数 传入sizeof(addr) 大小 函数返回时 返回真正接收到地址结构体的大小
//返回值 成功返回新的socket 文件描述符 用于和客户端通信 败返回-1
服务器调用
sockfd 前面服务器端已经bind 的socket描述符
addr 客户端信息
返回值 成功返回新的socket 文件描述符 用于和客户端通信 失败返回-1
send() recv()
#include
#include
int send(int sockfd,char *buff,int nbytes,int flags);
//不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据
//第一个参数指定 发送端 套接字描述符
//第三个参数指明 实际要发送 的数据的字节数
//第四个参数一般置0
int recv(int sockfd,char *buff,int nbytes,int flags);
//不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据
//第一个参数指定 接收端 套接字描述符
//第三个参数指明 buf的长度
//第四个参数一般置0
send 发送到另一端
recv 接受另一端
close()
#include
#include
int close(int sockfd);
//关闭一个套接字