linux 聊天室 知识点

一、具体操作
1.登陆虚拟机(ubutu)
  账号 root 密码root
2.打开多个窗口
      快捷键 ctrl+alt+t
    3.打开服务器
 ./server
4.设置本地IP地址
 ifconfig eth0 192.168.1.1
 查看IP地址 ifcofig
 将网卡禁用
    ifconfig eth0 down
    将网卡启用
    ifconfig eth0 up
    5.打开客户机
 ./client 192.168.1.1
6.打开数据库文件
 cd ./output
 打开文件
 sqlite3 chatroom.db
 显示文件内容
 select * from mytable;
 退出sqlite3,回来shell界面
 .quit
7.打开编辑文件
      vim main.c
      往前追踪 ctrl+]    
 往回退   ctrl+t
二、网络进程之间的通信 
    TCP/IP协议的应用程序通常采用应用编程接口 套接字socket
1.网络三元组 
 ip地址,协议,端口  
 (网络层的“ip地址”可以唯一标识网络中的主机,
   而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程))
2.socket概念
      Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口
 (建立了socket,就像与网络开了一个通道,各网络的主机可以通过通道传输数据)。
    3.套接字描述符
 3.1 其实就是一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,
     2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdout、stderr
      3.2 只要两个网络进程IP地址,端口号相同,使他们连接成功,便可以根据套接字描述符
          来读写数据。
 3.3 操作系统就创建一个文件描述符提供给应用程序访问文件。从应用程序的角度看,
     文件描述符是一个整数,应用程序可以用它来读写文件。
    4.文件描述符和文件指针的区别:
      文件描述符:在linux系统中打开文件就会获得文件描述符,它是个很小的正整数。
             每个进程在PCB(Process Control Block)中保存着一份文件描述符表,
 文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。
      文件指针:C语言中使用文件指针做为I/O的句柄。文件指针指向进程用户区中的一个被
           称为FILE结构的数据结构。FILE结构包括一个缓冲区和一个文件描述符。
而文件描述符是文件描述符表的一个索引,因此从某种意义上说文件指针
就是句柄的句柄(在Windows系统上,文件描述符被称作文件句柄)。
5.socket建立链接的过程
 服务器:
服务器端先初始化Socket
然后与端口绑定(bind)
对端口进行监听(listen)
调用accept阻塞,等待客户端连接
write()
read()
close()
 客户机:
客户端初始化一个Socket
连接服务器(connect)
write()
read()
close()
通常服务器在启动的时候都会绑定一个众所周知的地址(如ip地址+端口号),
用于提供服务,客户就可以通过它来接连服务器;而客户端就不用指定,有系
统自动分配一个端口号和自身的ip地址组合。这就是为什么通常服务器端在listen
之前会调用bind(),而客户端就不会调用,而是在connect()时由系统随机生成一个。
6.字节序
主机字节序:
我们平常说的大端和小端模式:不同的CPU有不同的字节序类型,
这些字节序是指整数在内存中保存的顺序,这个叫做主机序。引用标准的Big-Endian
和Little-Endian的定义如下:
   a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存
的高地址端。
   b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
网络字节序:
4个字节的32 bit值以下面的次序传输:首先是0~7bit,其次8~15bit,
然后16~23bit,最后是24~31bit。这种传输次序称作大端字节序。由于TCP/IP首部中
所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。
7.服务器的两种套接字
监听套接字: 监听套接字正如accept的参数sockfd,它是监听套接字,在调用listen
           函数之后,是服务器开始调用socket()函数生成的,称为监听socket描
述字(监听套接字)
连接套接字:一个套接字会从主动连接的套接字变身为一个监听套接字;而accept函
数返回的是已连接socket描述字(一个连接套接字),它代表着一个网络
已经存在的点点连接。
        7.1 一个服务器通常通常仅仅只创建一个监听socket描述字,它在该服务器的生命周期内
   一直存在。内核为每个由服务器进程接受的客户连接创建了一个已连接socket描述字,
   当服务器完成了对某个客户的服务,相应的已连接socket描述字就被关闭。
        7.2 自然要问的是:为什么要有两种套接字?
   原因很简单,如果使用一个描述字的话,那么它的功能太多,使得使用很不直观,
同时在内核确实产生了一个这样的新的描述字。
            连接套接字socketfd_new 并没有占用新的端口与客户端通信,依然使用的是与监
听套接字socketfd一样的端口号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值