网络编程

来源:互联网 发布:mysql 安装到指定路径 编辑:程序博客网 时间:2024/05/08 10:06

网络编程

Linux中的网络编程通过socket(套接字)实现,socket是一种文件描述符

一、socket有三种类型:

1、  流式套接字(SOCK_STREAM)

流式套接字可以提供可靠的面向连接的通讯流,它使用TCP协议,TCP保证了数据传输的正确性和顺序性

2、  数据报套接字(SOCK_DGRAM)

数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错,它使用数据报文协议UDP

3、  原始套接字(SOCK_RAW)

原始套接字允许使用IP协议,主要用于新的网络协议的测试等

二、网络地址

在socket程序设计中,struct sockaddr用于记录网络地址:

Struct sockaddr

{

  U_shortsa_family;

  Charsa_data[14];

}

Sa_family:协议族,采用“AF_xxx”的形式,如AF_INET(IP协议族)

Sa_data:14字节的特定协议地址

在socket程序设计中,struct socketaddr_in同样用于记录网络地址

Struct sockaddr_in

{

       Short int sin_family;//协议族

       Unsignedshort int sin_port;//端口号

       Struct in_addr sin_addr;//协议特定地址

       Unsigned char sin_zero[8];//填0

}

编程中一般使用与sockaddr等价的sockaddr_in数据结构

三、地址转换

IP地址通常由数字加点(192.168.0.1)的形式表示,而在structin_addr中使用的IP地址是由32位的整数表示的,为了转换,我们可以使用下面两个函数:

1、  int inet_aton(const char *cp,struct in_addr*inp)

2、  char *inet_ntoa(struct in_addr in)

函数里面a代表ascii,n代表network

Inet_aton是将a.b.c.d形式的IP转换为32位IP,存储在inp指针里面。Inet_ntoa是将32位IP转换为a.b.c.d的格式

四、字节序转换

不同类型的CPU对变量的字节存储顺序可能不同,有的系统是高位在前,低位在后,而有的系统是地位在前,高位在后,而网络传输的数据顺序是一定要统一的。所以当内部字节存储顺序和网络字节序(big endian)不同时,就一定要进行转换。

五、socket编程函数

进行socket编程的常用函数有:

Socket 创建一个socket

Bind 用于绑定IP地址和端口号到socket

Connect 该函数用于与服务建立连接

Listen 设置服务器能处理的最大连接要求

Accept 用来等待来自客户端的socket连接要求

Send 发送数据

Recv 接收数据

六、基于TCP的服务器

1、  创建一个socket,用函数socket()

2、  绑定IP地址,端口等信息到socket上,用函数bind()

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

4、  等待来自客户端的连接要求,用函数accept()

5、  收发数据,用函数send()和recv(),或者read()和write()

6、  关闭网络连接

基于TCP的客户端

1、  创建一个socket,用函数socket()

2、  设置要连接的服务器的IP地址和端口号等属性

3、  连接服务器,用函数connect()

4、  收发数据,用函数send()和recv(),或者read()和write()

5、  关闭网络连接

七、基于UDP的服务器

1、  创建一个socket,用函数socket()

2、  绑定IP地址,端口等信息到socket上,用函数bind()

3、  循环接收数据,用函数recvfrom()

4、  关闭网络连接

基于UDP的客户端

1、  创建一个socket,用函数socket()

2、  绑定IP地址,端口等信息到socket上,用函数bind()

3、  设置对方的IP地址和端口等属性

4、  发送数据,用函数sendto()

5、  关闭网络连接

八、服务器模型

在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务器端的程序就提出了特殊的要求,目前最常用的服务器模型有:

1、  循环服务器:服务器在同一时刻只能相应一个客户端的请求

2、  并发服务器:服务器在同一时刻可以响应多个客户端的请求

并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是由服务器创建一个子进程处理

0 0
原创粉丝点击