Socket编程简介
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
buffer: 数据缓冲区
length:读取数据长度
flags:指定读取方式
仰恩大学计算机与信息学院
sockt API flags
MSG_PEEK :读取数据到缓冲区,但不从接收队列中删除 MSG_OOB :读取带外数据
MSG_WAITALL:读取指定长度的数据后返回
仰恩大学计算机与信息学院
sockt API
sockfd:描述符
struct iovec: struct iovec{
void *iov_base;
size_t iov_len;
};
iovcnt: iovec长度
仰恩大学计算机与信息学院
sockt API
•ssize_t send(int socket, const void *buffer, size_t length, int flags); •ssize_t write(int fildes, const void *buf, size_t nbyte); •ssize_t sendto(int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len); •ssize_t sendmsg (int socket, const struct msghdr *message, int flags); •ssize_t writev(int fildes, const struct iovec *iov, int iovcnt);
sockfd:描述符 level:协议层次(SOL_SOCKET option_name :选项名称 option_value :选项值 option_len:选项长度
SOL_TCP )
仰恩大学计算机与信息学院
sockt API
•int setsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len);
仰恩大学计算机与信息学院
sockt API
•int socket(int domain, int type, int protocol); domain:协议域 type:
协议类型
protocol:具体的协议
仰恩大学计算机与信息学院
sockt API
•int socket(int domain, int type, int protocol); domain = AF_INET type = SOCK_STREAM/ SOCK_DGRAM Protocol = TCP/UDP socket(AF_INET,SOCK_STREAM,0);
•ssize_t read(int sockfd, void *buf, size_t nbyte);
sockfd:描述符
buffer: 数据缓冲区
length:读取数据长度
仰恩大学计算机与信息学院
sockt API
•ssize_t recvfrom(int sockfd, void *buffer, size_t length, int flags, struct sockaddr *addr, socklen_t *addr_len); socket:描述符 buffer:接收缓冲区 length:接收数据字节长度 flags:接收标志 addr:指定发送端地址 addrlen:地址长度
select()
shutdown() close() fcntl() ioctl() setsockopt() getsockopt() getsockname() getpeername()
仰恩大学计算机与信息学院
sockt API
•int socket(int domain, int type, int protocol);
•int getpeername(int socket, struct sockaddr *address, socklen_t *address_len);
sockfd:描述符
addr : struct sockaddr
addrlen:地址长度
仰恩大学计算机与信息学院
sockt API
•int getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len);
domain:协议域
AF_UNIX: UNIX协议族
AF_INET: Internet协议族(TCP/IP)
AF_NS: Xerox NS协议族
AF_IMPLINK: ARPANET 接口报文处理机协议
族
AF_APPLETALK: Apple 公司Appletalk协议族
仰恩大学计算机与信息学院
sockt API
sockt API
•int getsockname(int socket, struct sockaddr *address, socklen_t *address_len);
sockfd:描述符
addr : struct sockaddr
addrlen:地址长度
仰恩大学计算机与信息学院
sockt API
仰恩大学计算机与信息学院
sockt API
•int listen(int socket, int backlog);
sockfd:描述符
backlog : 监听队列的最大长度
仰恩大学计算机与信息学院
sockt API
•int accept (int socket, struct sockaddr *addr, socklen_t *addr_len);
仰恩大学计算机与信息学院
sockt API
•int shutdown(int sockfd, int how);
sockfd:描述符 how:
SHUT_RD SHUT_WR
SHUT_RDWR
仰恩大学计算机与信息学院
sockt API
•int close(int fd);
sockfd:描述符
仰恩大学计算机与信息学院
addr_len);
sockfd:描述符
addr : struct sockaddr
addrlen:地址长度
仰恩大学计算机与信息学院
sockt API
•ssize_t recv(int sockfd, void *buffer, size_t length, int flags);
sockfd:描述符
u_int msg_controllen;
int msg_flags; };
/* ancillary data buffer len */
/* flags on received message */
flags:接收标志
仰恩大学计算机与信息学院
sockt API
•ssize_t readv(int sockfd,const struct iovec *iov,int iovcnt);
返回值:如果成功,返回sockfd,否则返回-1
仰恩大学计算机与信息学院
sockt API
•int bind(int sockfd, struct sockaddr *addr, int addrlen);
sockfd:描述符
addr: addrlenBaidu Nhomakorabea地址长度
仰恩大学计算机与信息学院
sockt API
仰恩大学计算机与信息学院
sockt API
•int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout); void FD_ZERO(fd_set *fdset); void FD_CLR(int fd, fd_set *fdset); void FD_SET(int fd, fd_set *fdset); int FD_ISSET(int fd, fd_set *fdset);
sockfd:描述符 level:协议层次(SOL_SOCKET option_name :选项名称 option_value :选项值 option_len:选项长度
SOL_TCP )
仰恩大学计算机与信息学院
sockt API
option_name :选项名称
SO_ACCEPTCONN BOOL 套接口正在用listen()监听。 SO_BROADCAST BOOL 套接口设置为传送广播信息。 SO_DONTROUTE BOOL 禁止选径。 SO_ERROR int 获取错误状态并清除。 SO_KEEPALIVE BOOL 发送“保持活动”信息。 SO_OOBINLINE BOOL 在普通数据流中接收带外数据。
•int socket(int domain, int type, int protocol); domain:协议域 type:
议类型
SOCK_STREAM: 流socket SOCK_DGRAM: 数据报socket SOCK_RAW:
原始socket SOCK_SEQPACKET: 定序分组socket SOCK_RDM: 可靠发送的消息
sockfd:描述符
addr : struct sockaddr
addrlen:地址长度
返回值:如果成功,返回new_sockfd,否则-1.
仰恩大学计算机与信息学院
sockt API
•int connect(int socket, const struct sockaddr *addr, socklen_t
仰恩大学计算机与信息学院
socket 通信模型
UDP TCP
仰恩大学计算机与信息学院
UDP
仰恩大学计算机与信息学院
TCP
仰恩大学计算机与信息学院
socket API
socket() bind() listen() accept() connect() read() readv() revc() recvfrom() recvmsg() write() writev() send() sendto() sendmsg()
仰恩大学计算机与信息学院
socket 编程
2010-05-26
仰恩大学计算机与信息学院
主要内容
socket 概述 socket 通信模型 socket API
仰恩大学计算机与信息学院
socket 概述
什么是socket? socket被称为接口、插口、套接字…
它表示一条通信链路的一端,存储或者指向与 链路有关的所有信息。这些信息包括:使用的 协议、协议的状态信息(地址、端口号等)、 连接队列、数据缓存和可选的标志等。
SO_RCVBUF int 接收缓冲区大小。
SO_REUSEADDR BOOL 套接口能和一个已在使用中的地址捆绑。 SO_SNDBUF int 发送缓冲区大小。 SO_TYPE int 套接口类型(如SOCK_STREAM)。
……...
仰恩大学计算机与信息学院
sockt API
仰恩大学计算机与信息学院
sockt API
•ssize_t recvmsg(int sockfd, struct msghdr *message, int flags);
socket:描述符
message: struct msghdr { caddr_t msg_name; u_int msg_namelen; struct iovec *msg_iov; u_int msg_iovlen; caddr_t msg_control; /* optional address */ /* size of address */ /* scatter/gather array */ /* # elements in msg_iov */ /* ancillary data, see below */
struct sockaddr struct sockaddr_in
{
unsigned short sa_family; char sa_data[30]; };
{
unsigned short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[24]; };
length:读取数据长度
flags:指定读取方式
仰恩大学计算机与信息学院
sockt API flags
MSG_PEEK :读取数据到缓冲区,但不从接收队列中删除 MSG_OOB :读取带外数据
MSG_WAITALL:读取指定长度的数据后返回
仰恩大学计算机与信息学院
sockt API
sockfd:描述符
struct iovec: struct iovec{
void *iov_base;
size_t iov_len;
};
iovcnt: iovec长度
仰恩大学计算机与信息学院
sockt API
•ssize_t send(int socket, const void *buffer, size_t length, int flags); •ssize_t write(int fildes, const void *buf, size_t nbyte); •ssize_t sendto(int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len); •ssize_t sendmsg (int socket, const struct msghdr *message, int flags); •ssize_t writev(int fildes, const struct iovec *iov, int iovcnt);
sockfd:描述符 level:协议层次(SOL_SOCKET option_name :选项名称 option_value :选项值 option_len:选项长度
SOL_TCP )
仰恩大学计算机与信息学院
sockt API
•int setsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len);
仰恩大学计算机与信息学院
sockt API
•int socket(int domain, int type, int protocol); domain:协议域 type:
协议类型
protocol:具体的协议
仰恩大学计算机与信息学院
sockt API
•int socket(int domain, int type, int protocol); domain = AF_INET type = SOCK_STREAM/ SOCK_DGRAM Protocol = TCP/UDP socket(AF_INET,SOCK_STREAM,0);
•ssize_t read(int sockfd, void *buf, size_t nbyte);
sockfd:描述符
buffer: 数据缓冲区
length:读取数据长度
仰恩大学计算机与信息学院
sockt API
•ssize_t recvfrom(int sockfd, void *buffer, size_t length, int flags, struct sockaddr *addr, socklen_t *addr_len); socket:描述符 buffer:接收缓冲区 length:接收数据字节长度 flags:接收标志 addr:指定发送端地址 addrlen:地址长度
select()
shutdown() close() fcntl() ioctl() setsockopt() getsockopt() getsockname() getpeername()
仰恩大学计算机与信息学院
sockt API
•int socket(int domain, int type, int protocol);
•int getpeername(int socket, struct sockaddr *address, socklen_t *address_len);
sockfd:描述符
addr : struct sockaddr
addrlen:地址长度
仰恩大学计算机与信息学院
sockt API
•int getsockopt(int socket, int level, int option_name, void *option_value, socklen_t *option_len);
domain:协议域
AF_UNIX: UNIX协议族
AF_INET: Internet协议族(TCP/IP)
AF_NS: Xerox NS协议族
AF_IMPLINK: ARPANET 接口报文处理机协议
族
AF_APPLETALK: Apple 公司Appletalk协议族
仰恩大学计算机与信息学院
sockt API
sockt API
•int getsockname(int socket, struct sockaddr *address, socklen_t *address_len);
sockfd:描述符
addr : struct sockaddr
addrlen:地址长度
仰恩大学计算机与信息学院
sockt API
仰恩大学计算机与信息学院
sockt API
•int listen(int socket, int backlog);
sockfd:描述符
backlog : 监听队列的最大长度
仰恩大学计算机与信息学院
sockt API
•int accept (int socket, struct sockaddr *addr, socklen_t *addr_len);
仰恩大学计算机与信息学院
sockt API
•int shutdown(int sockfd, int how);
sockfd:描述符 how:
SHUT_RD SHUT_WR
SHUT_RDWR
仰恩大学计算机与信息学院
sockt API
•int close(int fd);
sockfd:描述符
仰恩大学计算机与信息学院
addr_len);
sockfd:描述符
addr : struct sockaddr
addrlen:地址长度
仰恩大学计算机与信息学院
sockt API
•ssize_t recv(int sockfd, void *buffer, size_t length, int flags);
sockfd:描述符
u_int msg_controllen;
int msg_flags; };
/* ancillary data buffer len */
/* flags on received message */
flags:接收标志
仰恩大学计算机与信息学院
sockt API
•ssize_t readv(int sockfd,const struct iovec *iov,int iovcnt);
返回值:如果成功,返回sockfd,否则返回-1
仰恩大学计算机与信息学院
sockt API
•int bind(int sockfd, struct sockaddr *addr, int addrlen);
sockfd:描述符
addr: addrlenBaidu Nhomakorabea地址长度
仰恩大学计算机与信息学院
sockt API
仰恩大学计算机与信息学院
sockt API
•int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout); void FD_ZERO(fd_set *fdset); void FD_CLR(int fd, fd_set *fdset); void FD_SET(int fd, fd_set *fdset); int FD_ISSET(int fd, fd_set *fdset);
sockfd:描述符 level:协议层次(SOL_SOCKET option_name :选项名称 option_value :选项值 option_len:选项长度
SOL_TCP )
仰恩大学计算机与信息学院
sockt API
option_name :选项名称
SO_ACCEPTCONN BOOL 套接口正在用listen()监听。 SO_BROADCAST BOOL 套接口设置为传送广播信息。 SO_DONTROUTE BOOL 禁止选径。 SO_ERROR int 获取错误状态并清除。 SO_KEEPALIVE BOOL 发送“保持活动”信息。 SO_OOBINLINE BOOL 在普通数据流中接收带外数据。
•int socket(int domain, int type, int protocol); domain:协议域 type:
议类型
SOCK_STREAM: 流socket SOCK_DGRAM: 数据报socket SOCK_RAW:
原始socket SOCK_SEQPACKET: 定序分组socket SOCK_RDM: 可靠发送的消息
sockfd:描述符
addr : struct sockaddr
addrlen:地址长度
返回值:如果成功,返回new_sockfd,否则-1.
仰恩大学计算机与信息学院
sockt API
•int connect(int socket, const struct sockaddr *addr, socklen_t
仰恩大学计算机与信息学院
socket 通信模型
UDP TCP
仰恩大学计算机与信息学院
UDP
仰恩大学计算机与信息学院
TCP
仰恩大学计算机与信息学院
socket API
socket() bind() listen() accept() connect() read() readv() revc() recvfrom() recvmsg() write() writev() send() sendto() sendmsg()
仰恩大学计算机与信息学院
socket 编程
2010-05-26
仰恩大学计算机与信息学院
主要内容
socket 概述 socket 通信模型 socket API
仰恩大学计算机与信息学院
socket 概述
什么是socket? socket被称为接口、插口、套接字…
它表示一条通信链路的一端,存储或者指向与 链路有关的所有信息。这些信息包括:使用的 协议、协议的状态信息(地址、端口号等)、 连接队列、数据缓存和可选的标志等。
SO_RCVBUF int 接收缓冲区大小。
SO_REUSEADDR BOOL 套接口能和一个已在使用中的地址捆绑。 SO_SNDBUF int 发送缓冲区大小。 SO_TYPE int 套接口类型(如SOCK_STREAM)。
……...
仰恩大学计算机与信息学院
sockt API
仰恩大学计算机与信息学院
sockt API
•ssize_t recvmsg(int sockfd, struct msghdr *message, int flags);
socket:描述符
message: struct msghdr { caddr_t msg_name; u_int msg_namelen; struct iovec *msg_iov; u_int msg_iovlen; caddr_t msg_control; /* optional address */ /* size of address */ /* scatter/gather array */ /* # elements in msg_iov */ /* ancillary data, see below */
struct sockaddr struct sockaddr_in
{
unsigned short sa_family; char sa_data[30]; };
{
unsigned short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[24]; };