socket
socket 就是TCP/IP的抽象层,当我们使用 socket 编程时,可以不用担心TCP/IP协议簇的实现过程。
c++ 中相关的结构体
|
|
在 Linux 下,用到的头文件有:
|
|
主要函数
socket()
int socket(int domain, int type, int protocol);
domain 应该设置成 “AF_INET”,就 象上面的数据结构struct sockaddr_in 中一样。然后,参数 type 告诉内核是 SOCK_STREAM 类型还是 SOCK_DGRAM 类型。最后,把 protocol 设置为 “0”。函数会返回一个sfd 套接字描述符。
bind()
int bind(int sockfd, struct sockaddr *addr, int addrlen)
将套接字和机器端口关联起来
listen()
int listen(int sockfd, int backlog)
监听端口函数。sockfd 是调用 socket() 返回的套接字文件描述符。backlog是在进入 队列中允许的连接数目。
accept()
int accpet(int sockfd, void *addr, int *addrlen)
server从等待队列中取出套接字描述符,用于发送和接受数据。
connect()
int connect(int sockfd, struct sockaddr *serv_addr, int addrlen)
sockfd 是系统调用 socket() 返回的套接字文件描述符。serv_addr 是 保存着目的地端口和 IP 地址的数据结构 struct sockaddr。错误的时候返回-1,并 设置全局错误变量 errno。
send()
int send(int sockfd, const void *msg, int len, int flags)
发送数据函数,sockfd 是你想发送数据的套接字描述符(或者是调用 socket() 或者是 accept() 返回的。)msg 是指向你想发送的数据的指针。len 是数据的长度。 把 flags 设置为 0 。
recv()
int recv(int sockfd, void *buf, int len, unsigned int flags)
将接受到的数据赋值到buf这个变量
shutdown()
int shutdown(int sockfd, int how)
sockfd 是你想要关闭的套接字文件描述复。how 的值是下面的其中之 一: 0或SHUT_RD – 不允许接收 1或SHUT_WR – 不允许发送 2或SHUT_RDWR – 不允许发送和接收(和 close() 一样)
代码
server.cpp
|
|
client.cpp
|
|