zoukankan      html  css  js  c++  java
  • c/s架构简单介绍

    c/s架构即客户端/服务端架构(想广义点)
    学习socket(套接字)是为了c/s架构服务的,而这之前要学ois七层(相当于全世界人想通讯必须规定用英语http://www.cnblogs.com/linhaifeng/articles/5937962.html)

    简单理解一下ois七层(也就是一种协议,世界上所有计算机中的不同应用程序之间的一种通用交流语言):
    物理层,数据链路层,网络层,传输层,(会话层,表示层,应用层)
    举个例子,首先物理层很好理解,是通信的介质(电缆,线路,无线等等)
    假设将网络通讯比作不同教室之间人的通讯,原始的人与人之间用吼(即广播),只要知道每个人名字(MAC地址)吼一声就可以。
    计算机A与计算机B通讯,计算机A产生一串0101,没有任何意义,数据链路层将它们分组,附上MAC地址,吼!!!原则上,如果世界上所有计算机在一个教室中,到这一层,问题解决。
    可是实际不可能这样,没这么大的教室,它们在不同的教室中。所以如果A,B不在同一个教室,首先还得知道它们所在的教室号,这时候网络层诞生,IP地址(协议)出现。
    有了这两个,A,B通讯没问题了。可是我想要的是计算机A上的QQ与计算机B上面的QQ通讯,而不是与暴风什么的。所以还得锁定电脑上的不同程序,而每个程序与端口绑定,基于端口有TCP/UDP协议。
    (因为IP是绑定在网卡上(mac)的,所以有时候说ip标识一台计算机是隐含了这层意思)
    而每次这样通讯也太麻烦了,所以有人将TCP/IP协议封装,也就是将应用层(广义)以下封装,留几个接口调用,这样产生了socket协议。说白了基于socket协议也就是基于IOS协议

    因此,客户端是一个程序,服务端是一个程序,两种通讯是要基于IOS协议,这里相当于简化,基于SOCKET(其实套接字有基于网络的,还有基于文件的,这里相当于基于网络的)



    下面是一套简陋的客户端与服务端:
    socket客户端:
     1 import socket
     2 
     3 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     4 
     5 phone.connect(('127.0.0.1',8000))     # 拨电话 , IP只能绑定自己电脑上的IP
     6 
     7 # 必须二进制发收,不能直接发字符串
     8 phone.send('hello'.encode('utf-8'))    # 假设发一个hello
     9 data = phone.recv(1024)  # 接收服务器发来的消息
    10 print('收到服务器的消息是: ',data)
    View Code
    
    

    这张图片帮助简单理解,下面是服务端:

     1 import socket
     2 
     3 '''
     4 这段代码其实就是实现TCP的三次握手,数据通讯(每次发送都有ack回应,所以说是严密的),四次挥手
     5 '''
     6 
     7 phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # AF_INET是基于网络的意思
     8 phone.bind(('127.0.0.1',8000))  # IP+端口,这里的IP地址必须是自己电脑的IP
     9 phone.listen(5)    # 对多等多少个电话,相当于缓存大小
    10 
    11 print('---------------------------下面accept等待')
    12 
    13 conn, addr = phone.accept()         # 等电话,一旦有电话拿到电话连接与对方手机号,TCP背后做三次握手
    14 
    15 # 注意通讯是基于网络,也就是二进制通讯
    16 msg = conn.recv(1024)           #收对方消息,1024代表收对方多少量消息
    17 print('客户端发来的消息是: ',msg)
    18 
    19 
    20 conn.send(msg.upper())                 # 发消息
    21 
    22 conn.close()
    23 phone.close()
    View Code



  • 相关阅读:
    初探XML
    Hibernate 由实体类与配置文件的配置关系生成数据库中的表
    利用JSP中的过滤器解决中文乱码问题
    关于iBatis配置xml文件时出现中文注释出错的一个问题(很坑爹.)
    Myeclipse中xml文件里自动提示消失解决办法
    iBatis的基本配置+CRUD操作
    Myeclipse下配置svn
    Hibernate与iBastis 比较(转载)
    本人了解的分页查询
    Hibernate五大核心接口简介
  • 原文地址:https://www.cnblogs.com/maxiaonong/p/9498249.html
Copyright © 2011-2022 走看看