1.网络编程不得不提的三大知识点:
(1)IO流(设备:控制台(键盘和显示器标准的输入输出设备),文件,网络socket)
IO流操作的三大步骤:定义流对象,数据的传输和转移,关闭流对象
(2)多进程(多线程)
(3)Socket网络编程
一个服务器程序应该包括:socket(提供网络交互),IO(输入输出数据),多进程和多线程(实现程序的并发执行)
2.linux网络优势
(1)完善的内置网络
(2)免费提供了大量支持Internent的软件
(3)用户能通过一些Linux命令完成内部信息或文件的传输
(4)提供远程访问的服务
(5)安全可靠
3.TCP/IP与OSI参考模型
OSI参考模型:应用层(处理网络应用),表示层(数据表示),会话层(主机间通信),传输层(端到端的连接),网络层(寻址和最短路径),数据链路层(介质访问),物理层(二进制传输)。
TCP/IP参考模型:应用层,传输层,网络层,网络接口层。
4.Socket
(1)Linux中的网络编程通过Socket(套接字)接口实现,Socket是一种文件描述符。
描述:
a.计算机进程间通信的一种方式(端点)
b.起源于BSD (Berkeley Socket)
c.是在named pipe 的基础上发展起来的
d.可兼容多种协议:
CP/IP NETBIOS UUCP XNS施乐
e.可兼容多种操作系统:
Windows Linux UINX Mac OS
(2)套接字socket有三种类型:
流式套接字(SOCK_STREAM)
流式的套接字可以提供可靠的、面向连接的通讯流。它使用TCP协议。TCP保证了数据传输的正确性和顺序性。
数据报套接字(SOCK_DGRAM)
数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用UDP协议。
原始套接字
原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议的测试等。
(3)Socket编程函数
进行Socket编程的常用函数有:
①int socket(int domain, int type, int protocol)
创建一个socket。
②int bind(int sockfd, const struct sockaddr *my_addr, socklen_taddrlen);
用于绑定IP地址和端口号到socket。
③int connect(int sockfd, const struct sockaddr *serv_addr, socklen_taddrlen);
该函数用于绑定之后的client端,与服务器建立连接。
④int listen(int sockfd, int backlog);
设置能处理的最大连接要求,Listen()并未开始接收连线,只是设置socket为listen模式。
⑤int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
用来接受socket连接。
⑥ssize_t send(int s, const void *buf, size_t len, int flags);
ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);//这个用于UDP协议
发送数据
⑦ssize_t recv(int s, void *buf, size_t len, int flags);
ssize_t recvfrom(int s, void *buf, size_t len, int flags,struct sockaddr *from, socklen_t *fromlen);//这个用于UDP协议
接收数据
⑧int close(int fd);
关闭socket连接。
⑨int setsockopt(int s, int level, int optname, const void *optval,socklen_t optlen);
解决端口重用的问题。
5.网络地址
在socket程序设计中,struct sockaddr用于记录网络地址:
struct sockaddr
{
u_short sa_family;
char sa_data[14];
}
sa_family:
地址族,采用“AF_xxx”的形式,如:AF_INET(IP协议族)。
sa_data:
14字节的特定协议地址。
6.地址结构
struct sockaddr_in
{
short int sin_family; /* Internet地址族 */
unsigned short int sin_port; /* 端口号 */
struct in_addr sin_addr; /* IP地址 */
unsigned char sin_zero[8]; /* 填0 */
}
编程中一般并不直接针对sockaddr数据结构操作,而是使用与sockaddr等价的sockaddr_in数据结构
struct in_addr
{
unsigned long s_addr;/* s_addr: 32位的地址。*/
}
7.HTTP服务器(web服务器)
①基于请求和响应的
②支持HTTP协议
③访问的方式:浏览器
GET /address HTTP/1.1
POST /address HTTP/1.1
/*内存清零: void *memset(void *s, int c, size_t n); void bzero(void *s, size_t n);*/
(1)IO流(设备:控制台(键盘和显示器标准的输入输出设备),文件,网络socket)
IO流操作的三大步骤:定义流对象,数据的传输和转移,关闭流对象
(2)多进程(多线程)
(3)Socket网络编程
一个服务器程序应该包括:socket(提供网络交互),IO(输入输出数据),多进程和多线程(实现程序的并发执行)
2.linux网络优势
(1)完善的内置网络
(2)免费提供了大量支持Internent的软件
(3)用户能通过一些Linux命令完成内部信息或文件的传输
(4)提供远程访问的服务
(5)安全可靠
3.TCP/IP与OSI参考模型
OSI参考模型:应用层(处理网络应用),表示层(数据表示),会话层(主机间通信),传输层(端到端的连接),网络层(寻址和最短路径),数据链路层(介质访问),物理层(二进制传输)。
TCP/IP参考模型:应用层,传输层,网络层,网络接口层。
4.Socket
(1)Linux中的网络编程通过Socket(套接字)接口实现,Socket是一种文件描述符。
描述:
a.计算机进程间通信的一种方式(端点)
b.起源于BSD (Berkeley Socket)
c.是在named pipe 的基础上发展起来的
d.可兼容多种协议:
CP/IP NETBIOS UUCP XNS施乐
e.可兼容多种操作系统:
Windows Linux UINX Mac OS
(2)套接字socket有三种类型:
流式套接字(SOCK_STREAM)
流式的套接字可以提供可靠的、面向连接的通讯流。它使用TCP协议。TCP保证了数据传输的正确性和顺序性。
数据报套接字(SOCK_DGRAM)
数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用UDP协议。
原始套接字
原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议的测试等。
(3)Socket编程函数
进行Socket编程的常用函数有:
①int socket(int domain, int type, int protocol)
创建一个socket。
②int bind(int sockfd, const struct sockaddr *my_addr, socklen_taddrlen);
用于绑定IP地址和端口号到socket。
③int connect(int sockfd, const struct sockaddr *serv_addr, socklen_taddrlen);
该函数用于绑定之后的client端,与服务器建立连接。
④int listen(int sockfd, int backlog);
设置能处理的最大连接要求,Listen()并未开始接收连线,只是设置socket为listen模式。
⑤int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
用来接受socket连接。
⑥ssize_t send(int s, const void *buf, size_t len, int flags);
ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);//这个用于UDP协议
发送数据
⑦ssize_t recv(int s, void *buf, size_t len, int flags);
ssize_t recvfrom(int s, void *buf, size_t len, int flags,struct sockaddr *from, socklen_t *fromlen);//这个用于UDP协议
接收数据
⑧int close(int fd);
关闭socket连接。
⑨int setsockopt(int s, int level, int optname, const void *optval,socklen_t optlen);
解决端口重用的问题。
5.网络地址
在socket程序设计中,struct sockaddr用于记录网络地址:
struct sockaddr
{
u_short sa_family;
char sa_data[14];
}
sa_family:
地址族,采用“AF_xxx”的形式,如:AF_INET(IP协议族)。
sa_data:
14字节的特定协议地址。
6.地址结构
struct sockaddr_in
{
short int sin_family; /* Internet地址族 */
unsigned short int sin_port; /* 端口号 */
struct in_addr sin_addr; /* IP地址 */
unsigned char sin_zero[8]; /* 填0 */
}
编程中一般并不直接针对sockaddr数据结构操作,而是使用与sockaddr等价的sockaddr_in数据结构
struct in_addr
{
unsigned long s_addr;/* s_addr: 32位的地址。*/
}
7.HTTP服务器(web服务器)
①基于请求和响应的
②支持HTTP协议
③访问的方式:浏览器
GET /address HTTP/1.1
POST /address HTTP/1.1
/*内存清零: void *memset(void *s, int c, size_t n); void bzero(void *s, size_t n);*/