一、计算机体系结构
计算机体系结构主要有以下三种
每一层协议对于的功能与应用有
二、Linux的socket编程
1、函数介绍
int socket(int domain, int type, int protocol);
参数1:AF_INET IPv4 Internet protocols
参数2:SOCK_STREAM(TCP) SOCK_DGRAM(UDP)
返回值:成功返回socket id,失败返回-1
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
参数1:socket id
参数2:sockaddr
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
参数3:addrlen
返回值:成功返回0,失败返回-1
int listen(int sockfd, int backlog);
参数1:socket id
参数2:连结队列个数
返回值:成功返回0,失败返回-1
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数1:socket id
参数2:client_addr
参数3:client_addr_len
返回值:成功返回非负整数,失败返回-1
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
参数1:socket id
参数2:接受指针
参数3:接受长度
参数4:默认为0
返回值:接受长度,当连结断开返回0
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
参数1:socket id
参数2:发送数据指针
参数3:发送长度
参数4:默认为0
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
参数1:socket id
参数2:server_addr
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVER_PORT);
server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
参数3:server_addr_len
返回值:成功返回0,失败返回-1
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
参数1:socket id
参数2:接受指针
参数3:接受长度
参数4:默认0
参数5:sendaddr
参数6:sendaddr_len
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
参数1:socket id
参数2:发送数据指针
参数3:发送数据长度
参数4:默认0
参数5:recvaddr
struct sockaddr_in recvaddr;
recvaddr.sin_family = AF_INET;
recvaddr.sin_port = htons(RECV_PORT);
recvaddr.sin_addr.s_addr = inet_addr(RECV_IP);
参数6:recvaddr_len
三、TCP与UDP的服务器与客户端创建过程
1、TCP
TCP服务器:
1)socket
2)bind
3)listen
4)accept
5)recv与send
TCP客户端:
1)socket
2)connect
3)send与recv
1、UDP
UDP接受端
1)socket
2)bind
3)recvfrom与sendto
UDP发送端
1)socket
2)sendto与recvfrom
注:当将socket关闭时,recv在未接受数据不会立即返回,可使用以下函数关闭socket读写功能,即可立即返回。
shutdown(socket, SHUT_RDWR);