linux下socket编程

一.基于socket文件的IPC

网络编程采用的就是基于socket文件的通信方式

二种模型:对等模型与主客模型(CS模型)

1.对等模型

1.1.建立socket

int socket(

int domain,//地址族的类型 AF_UNIXAF_ANET

int type,//支持的数据格式:流SOCK_STREAM/报文SOCK_DGRAM,流无边界,报文有边界

int protocol);//支持的协议  0表示采用默认协议

成功返回文件描述符号

失败返回-1

1.2邦定文件/网络设备,即绑定在交换目录,也就是绑定在一个地址上,URL(Universe Resource Location)

协议://路径/文件名

file:///usr/bin/ls

http://192.168.0.72/index.php

struct sockaddr;

struct sockaddr_un;un=unix

struct sockaddr_in;in=internet

bind(int fd, 描述符号

struct sockaddr*addr, 设备地址

size_t addrlen) 地址长度

1.3发送/接收数据

read/write send/recv sendto/recvfrom

1.4关闭socket

访问socket文件:

2.1建立socket:socket

2.2连接到目标:connect

2.3发送数据:write/send/sendto

2.4关闭socket:close

二.网络

1.基础

1.1网络工具 pingipconfigifconfig

lsof netstat-a -u -t -x -t -nroute

1.2网络的基本概念

   网络编程采用socket模型

网络通信本质也是进程之间的IPC,是不同主机之间。

识别主机:4字节整数:IP地址

识别进程:4字节整数:应用端口

1.3.IP地址的表示方法:计算机内部表示:4字节整数(in_addr_t)

外部表示:竖点字符串表示法("192.168.0.26")

字结构表示structin_addr

连接点:endpoint

struct sockaddr_in

{

int sin_family;

in_port_t sin_port;

struct in_addr sin_addr

}

IP地址转换

inet_addr:把字符串转换为整数   网络字节序

inet_on:把字符串转换为struct in_addr网络字节序

inet_network:把字符串转换为整数 本地字节序

inet_ntoa:把结构体转换为字符串

1.4.IP地址的意义

IP地址的位表达不同意义:

IP地址组建网络:网络标识/主机标识

1.5计算机系统中的网络配置

/ect/hosts文件 配置IP,域名,主机名

/etc/protocols文件 配置系统支持的协议

/etc/services文件 配置服务  get***by***系列函数

protoent

uname -r 获取

2.TCP/UDP编程

对等模型:AF_UNIX(AF_INET) SOCK_DGRAM0:UDP

C/S模型:AF_UNIX(AF_INET) SOCK_STREAM0:TCP

2.0网络编程

ISO的七层模型 实际的四层模型:数据链路层(物理传输),网络层(数据传输方式),传输层(数据传输的结果),应用层(数据传递的含义)

2.1.UDP编程的数据特点

UDP采用对等模型socket

send+connect=sendto

bind主要目的告诉网络发送数据的目标

recvfrom不是从指定IP接收,而是从任意IP接收数据,返回发送数据者的IP

只要知道对方的IP与PORT,就能发送数据。底层网络驱动,帮我们自动生成IP与端口。

接收方不区分发送者。

send

sendto

int fd,//socket描述符号

void *buf,//发送的数据缓冲

size_t size,//发送的数据长度

int flags,//发送方式MSG_NOWAITMSG_OOB

const structsockaddr*addr,//发送的目标

socklen_t len)//vsockaddr_in的长度

recv

recvfrom(

int fd,

void *buf,

size_t size,

int flags,

struct sockaddr*addr,//返回发送者IP与端口

socklen_t *len);//输入返回IP的缓冲大小

2.2.TCP编程编程模型

socket 建立服务器的文件描述符号缓冲

bind 把IP地址与端口设置到文件描述符号中

listen 负责根据客户连接的不同IP端口负责,生成对应的文件描述符

accept 一旦listen有新的描述符号产生,返回,否则 阻塞。

2.3.TCP的通信特点

有连接:只要连接后,发送数据不用指定IP与端口

数据无边界:TCP是数据流,非数据报文

描述符是双工

数据准备:TCP协议可以保证数据是完全正确

TCP发送数据问题:不能认为固定长的数据,其接收一定正确,要使用MSG_WAITALL

TCP数据发送分析:基本数据int shortlongdouble

结构体数据struct 固定长度数据,建议使用MSG_WAITALL

字符串以及文件数据等不固定长度数据,制定数据包(头与体):头固定与体长度变化,在头中存放数据大小,体中存放实际数据,保证接收缓冲填满才返回。

传文件:先传递文件名,再传递数据,传递0长度的数据表示结束

3.TCP的服务器编程模型

TCP的服务器端维护多个客户的网络描述符。

对服务器多个客户描述符号同时做读操作是不可能的,需要多任务模型。

TCP多任务模型:

3.1.采用多进程

3.2.采用IO异步模型(select模型,POLL模型)

3.3.多线程

3.4.多进程池

3.5.多线程池

4.多进程应用(聊天程序)

4.1.怎样使用多进程

4.2.多进程的缺陷,解决方法

客户端:

2.1.建立socket

2.2连接服务器

2.3.创建CURSES界面

2.4.创建子进程

2.5.父进程中,输入,发送聊天信息

2.6.在子进程中,负责接收服务器传递其他客户聊天信息

服务器

建立socket

绑定地址

监听

循环接收客户连接

为客户创建子进程

在子进程接收该客户的数据,并且广播

总结:

1.TCP的四大特点

2.TCP的数据接收:固定长与变长数据接收

3.TCP的服务器多进程处理,多进程中,内存资源结构独立。

新的进程文件描述符号环境在父进程中无法访问。文件描述符不一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值