Socket编程(3)-Socket API

2019-01-16  本文已影响0人  Veahow

1 Socket API函数

WinSock的实现方式是利用Windows的动态链接库实现的,所以如果在Windows环境下进行socket编程,需要事先初始化Windows Sockets API,可以通过调用WSAStartup()完成。在使用结束后释放所使用的Windows Sockets DLL,可以通过调用WSACleanup()来完成。这里的WSA指的是Windows Socket Asynchronous,即Windows异步套接字。
在Linux下可使用man命令查阅相关API函数的详细信息。

1.1 WSAStartup

// #include <WinSock2.h>
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

例:使用2.2版本的WinSock的程序代码段

wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);

1.2 WSACleanup

// #include <WinSock2.h>
int WSACleanup(void);

1.3 socket

// Windows:#include <WinSock2.h>
// Linux:#include <sys/types.h> <sys/socket.h>
int socket(int domain, int type, int protocol);

例:创建一个面向TCP/IP的流式套接字代码段

struct protoent *p;
p = getprotobyname("tcp");
SOCKET sd = socket(PF_INET, SOCK_STREAM, p->p_proto);
五层模型 主要协议
应用层
传输层 TCP/UDP
网络层 IP/ICMP/IGMP
数据链路层
物理层

1.4 closesocket/close

int closesocket(SOCKET sd);    // Windows:#include <WinSock2.h>
int close(int fd);             // Linux:#include <unistd.h>

1.5 bind

// Windows:#include <WinSock2.h>
// Linux:#include <sys/types.h> <sys/socket.h>
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 
struct sockaddr{
     unsigned short sa_family; //通信协议类型族AF_xx
     char sa_data[14];  //14字节协议地址,包含该socket的IP地址和端口号
};

1.6 listen

// Windows:#include <WinSock2.h>
// Linux:#include <sys/types.h> <sys/socket.h>
int listen(int sockfd, int backlog);

1.7 connect

// Windows:#include <WinSock2.h>
// Linux:#include <sys/types.h> <sys/socket.h>
int connect(int sockfd,const struct sockaddr *addr, socklen_t addrlen)

1.8 accept

// Windows:#include <WinSock2.h>
// Linux:#include <sys/types.h> <sys/socket.h>
int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen)

1.9 send, sendto

// Windows:#include <WinSock2.h>
// Linux:#include <sys/types.h> <sys/socket.h>
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                      const struct sockaddr *dest_addr, socklen_t addrlen);

1.10 recv, recvfrom

// Windows:#include <WinSock2.h>
// Linux:#include <sys/types.h> <sys/socket.h>
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);

1.11 setsockopt, getsockopt

int setsockopt(int sd, int level, int optname, *optval, socklen_t optlen);
int getsockopt(int sd, int level, int optname, *optval, socklen_t *optlen);

2 Socket API函数小结

Socket API调用基本流程
上一篇下一篇

猜你喜欢

热点阅读