linux下的网络编程

来源:互联网 发布:编辑gif的软件 编辑:程序博客网 时间:2024/06/10 15:59
 

linux网络概述
1,强大完善的网络
2,支持大量支持internet的软件
3,linux命令完成内部信息的网络传输
4,远程访问
5,安全可靠

网络层协议:IP协议、ICMP(ping)协议、ARP协议
传输曾:TCP(连接型可靠协议)|UDP(不可靠非连接协议)
应用层:Telnet、FTP和TFTP、SMTP、DNS

 

int *ptr;
ptr=(int *)0x2345;
*ptr=oxaa66;


面向对象的三大特征:封装性、继承性、多态性
封装性:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private、protected、public)

继承性:广义的继承有三种实现方法:实现继承(使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、 接口继承(仅使用属性和方法、实现滞后和子类实现)

多态性:是将父类对象设置成为一个或更多它的子对象相等的技术。用子类对象给父类对象赋值之后,父类对象就会根据当前赋值给它的子对象的特征以不同的方式运行

C++的空类有哪些成员函数:
缺省构造函数
缺省拷贝构造函数
缺省析构函数
缺省赋值运算符
缺省取地址运算符
缺省取地址运算符 const

 


linux网络编程基础
linux基于socket:一种文件描述符
流式套接字(SOCK_STREAM)(基于TCP协议)(准确性要求高)
数据报套接字(SOCK_DGRAM)(基于UDP协议)(实时性高)
原始套接字(SOCK_RAM)(基于IP协议)

记录网络地址:
struct sockaddr
{
 u_short sa_family;//哪种协议的地址?地址类型即哪一族
 char sa_data[14];//存地址值
}

struct sockaddr_in
{
 short int sin_family;//协议族
 unsigned short int sin_port;//端口号
 struct in_addr sin_addr;//协议特定地址
 unsigned char sin_zero[8];//填0

}

typedef struct in_addr
{
 union{//联合记录地址

 unsigned long S_addr;//用32位整数记录地址  }
}

big endian(先传输低字节)网络上传输的数据,网络字节序(有时需要字节序转换):
htons:把unsigned short类型从主机序转化到网络序
htonl:把unsigned long类型从主机序转化到网络序
ntohs:把unsigned short类型从网络序转化到主机序
ntohl:把unsigned long类型从网络序转化到主机序

进行socket编程的常用函数:
socket:创建一个socket
bind:用于绑定IP地址和端口号到socket
connect:用于服务器建立连接(TCP)
listen:设置服务器能处理的最大连接要求
accept:用来等待来自客户端的socket连接请求
send:发送数据
recv:接收数据

 

 

基于TCP的网络编程:
服务器:

1.创建一个socket系统调用创建套接字,用函数socket()
sockfd=socket(AF_INET,SOCK_STREAM,0)

2,绑定IP地址(socket通过那个ip通信)、端口等信息到socket上,用函数bind()
bin(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))

3,设置允许的最大连接数,用函数listen()
listen(sockfd,5)

4,等待来自客户端的连接请求,用函数accept()//阻塞点
new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size)

5,收发数据,用函数send()和rcv(),或者read()和write()
read(new_fd,buffer,1024)

6,关闭网络连接
close(new_fd)

客户端(函数用法如上):
获取主机【IP】:gethostbyname(argv[1])
1,创建一个socket系统调用创建套接字,用函数socket()
2,设置要连接的服务器IP地址和端口等属性
3,连接服务器,用函数connect()
connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))
4,收发数据,用函数send()和recv(),或者read()和write()
write(sockfd,buffer,sizeof(buffer))
5,关闭网络连接

 

基于UDP的网络编程
服务器:
1,创建socket,用函数socket()
sockfd=socket(AF_INET,SOCK_DGARM,0)
2,绑定IP地址、端口等信息到socket上,用函数bind()
//设置socket使用的是系统的那些IP;
bin((sockfd,(struct sockaddr *)&addr),sizeof(struct sockaddr_in))//socket和服务器地址信息端绑定
3,循环接收数据,用函数recvfrom()//阻塞点

4,关闭网络连接


客户端:
1,创建一个socket,用函数socket()
2,绑定IP地址、端口等信息到socket上,用函数bind()
3,设置服务器的IP地址和端口等属性
addr.sin_family=AF_INET//基于IP的协议族
add.sin_port=htons(SERVER_PORT);//端口和server端口号一致才能监听
inet_aton(argv[1],&addr,sin_addr);//把一个字符串转化为32位整数来填充到IP地址
4,发送数据,用函数sendto()
5,关闭网络连接


服务器模型
循环服务器:服务器在同一时刻只能享受一个客户端请求
UDP://开始不需要建立连接,所以可以同时服务于多个客户端,
socket();
bind();
while(1)
{
 recvfrom();
 process();
 sendto()
}
TCP://一次只处理一个客户端的请求
socket();
bind();
listen();
while(1)
{
 accept();
 process();
 close();
}


并发服务器:服务器在同一时刻可以享受多个客户端请求
TCP:
socket();
bind();
listen();
while(1)
{
 accept();
 if(fork()==0)
 {
  process();
  close();
  exit();
 }
 close();
}