1.套接字的地址结构是:
- struct socket_in{
- unsigned short sin family; //地址类型
- unsigned short int sin_port; //端口号
- struct in_addr sin_addr; //IP地址
- unsigned char sin_zero[8]; //填充字节,一般赋值为0.
- struct in_addr{
- unsigned long s_addr;
- }
- struct sockaddr_in sock;
- sock.sin_family=AF_INET;
- sock.sin_port=htons(4521);//设置端口号为4521
- sock.sin_addr.s_addr=inet_addr(INADDR_ANY); //任意地址
我们可以通过命令man 2 socket 看到socket 的函数原型是:
- #include <sys/types.h> /* See NOTES */
- #include <sys/socket.h>
- int socket(int domain, int type, int protocol);
3.建立连接。
man connect 的函数原型是:
- #include <sys/types.h> /* See NOTES */
- #include <sys/socket.h>
- int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
函数bind 用来将一个套接字和某个端口绑定在一起,在shell下输入"man 2 bind"可获取该函数的原型是:
- #include <sys/types.h> /* See NOTES */
- #include <sys/socket.h>
- int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
5.在套接字上监听。
函数listen把套接子转化为被动监听。listen 的函数原型是:
- #include <sys/types.h> /* See NOTES */
- #include <sys/socket.h>
- int listen(int sockfd, int backlog); //backlog指定了该连接队列的最大长度。
6.接受连接。
函数accept用来接受一个连接请求。函数原型为:
- #include <sys/types.h> /* See NOTES */
- #include <sys/socket.h>
- int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
send用来在TCP套接字上发送数据,获得原型是:
- #include <sys/types.h>
- #include <sys/socket.h>
- ssize_t send(int sockfd, const void *buf, size_t len, int flags);
- #include <sys/types.h>
- #include <sys/socket.h>
- ssize_t recv(int sockfd, void *buf, size_t len, int flags);
函数close用来关闭一个套接字描述符,它与关闭文件描述符是类似的,可获得它的原型是:
- #include <unistd.h>
- int close(int fd);