码迷,mamicode.com
首页 > 编程语言 > 详细

python之路--网络编程之socket

时间:2019-01-02 19:05:00      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:基于   并且   chrome   socket   服务   输出   常用   优酷   工具   

  我们使用qq、微信和别人聊天,通过浏览器来浏览页面、看京东的网站,通过优酷、快播(此处只是怀念一下)看片片啥的等等,通过无线打印机来打印一个word文档等,只要有无线、有网、有4G,我们就能好好的聊天,好好的看片片、好好的购物什么的,对吧,那么这些操作都叫做网络通信,确切来说都需要使用网络通信,前提是你要有网(大家记着这个‘网‘,我下面会给大家详解),原来生活中处处使用了网络通信,我们通过网络通信的不同形式:比如说qq是我们下载到电脑或者手机上的应用程序(qq应用程序就是人家腾讯开发的软件,放到你的电脑或者手机上供你使用的,大概明白应用程序意思就行,不用深究~~),浏览器也是我们下载的应用程序,但是浏览器是通过页面来访问别人的网站的,而打印机我是通过我电脑上的word来操作使用的。根据这些不同的场景或者说不用的沟通方式,在业内划分了下面两个架构(架构:就是不同的组成结构)。在看下面的几个架构之前,我们需要知道什么是客户端,什么是服务端。客户端:安装在你电脑上的qq,浏览器(360浏览器、chrome浏览器、IE浏览器等),当我们使用qq发送消息的时候,消息先发送到了腾讯,然后腾讯在转发到你朋友的qq上,此时你的qq就是客户端,腾讯就是服务端。当我们使用浏览器来看京东的网站的时候,我们电脑上的浏览器就叫做客户端,京东就叫做服务端。

客户端英文名称:Client(使用服务端的服务),服务端英文名称:Server(一直运行着,等待服务别人,不能有一天访问百度,百度页面打不开,不行吧。),下面所说的C\S架构就是说的Client\Server架构。

    a.硬件C\S架构:打印机。

    b.软件C\S架构:QQ、微信、优酷、暴风影音、浏览器(IE、火狐,360浏览器等)。其中浏览器又比较特殊,很多网站是基于浏览器来进行访问的,浏览器和各个网站服务端进行的通讯方式又常被成为B\S架构(浏览器英文名称:Browser),web开发就是这个,后面大家知道有前端的课程对吧,前端就是浏览器上的知识,以后你会经常和浏览器打交道,学完前端就可以进行web开发全栈开发了。如果我把所有的东西都做成应用程序是不是很麻烦啊,要装很多的软件对吧,所有就开始有了B\S架构,只需要个浏览器就能使用很多的工具了,并且提供了一个统一入口,这也是为什么B\S架构火了起来。但是手机端的还是用的应用程序多一些,但是手机端B\S架构也是一个趋势,就像微信的小程序和公众号,为什么说是一个趋势呢,不仅仅是因为方便因为省钱,而是提供了一个统一的入口,其实微信早就实现了。统一入口是什么意思呢?就像我们公司经常用的一个公司内部管理系统,请假、打卡、报销、查客户等等,如果这些功能都需要打开一个网页或者app,是不是很难受啊,那么公司就做了这么一个系统,大家在这个系统上关于上班的一些你需要的功能就都能完成了,这就是统一入口。这也是一个开发思想,大程序分成几个小程序,开发速度也快,开发一个小功能就能上线,而不需要等着所有的功能全部开发完成才上线,解耦分治思想,公司做开发时这种思想很流行,迭代开发。说多了。。

    不管哪个架构,他们都要进行网络通信,基本都要用socket,我们学习socekt就是为了完成C\S架构项目的开发

#  客户端

import socket

# 创建socket对象
client = socket.socket()
# 找到服务器端口,IP地址要用字符串,端口要用int 一般在8000以后
server_ip_port = (‘192.168.12.56‘,8001)
# 连接服务端的应用程序,通过connect方法,参数是服务端的IP地址和端口
client.connect(server_ip_port)
while 1:
    to_server_msg = input(‘说给服务端听:‘)
    print(‘=======输入Q退出=======‘)
    if to_server_msg.upper() == ‘Q‘:
        break
    else:
        # 发消息,用的是send方法,里面应该装bytes 需要把中文编码
        client.send(to_server_msg.encode(‘utf-8‘))
    # 服务端通过conn连接通道来收发消息,通过recv方法,recv里面的参数是字节(B),1024的意思1024B=1KB
    from_server_msg = client.recv(1024) # receive
    # 把bytes解码成中文
    print(‘服务端返回的话:‘,from_server_msg.decode(‘utf-8‘))
client.close()

  

# 服务端

import socket

# 创建socket对象
server = socket.socket()
# 给程序设置一个IP地址和端口号
ip_port = (‘192.168.12.56‘,8001)
# 绑定IP地址和端口
server.bind(ip_port)
# 监听IP地址和端口,括号里面什么都不用写
server.listen()
print(‘====开始建立连接====‘)
# 等待建立连接,conn是连接通道,address是客户端的地址,(阻塞程序)
conn,addr = server.accept()
while 1:
    # 服务端通过conn连接通道来收发消息,通过recv方法,recv里面的参数是字节(B),1024的意思1024B=1KB
    from_client_msg = conn.recv(1024)
    print(‘客户端发出:‘, from_client_msg.decode(‘utf-8‘))
    to_client_msg  = input(‘回复客户端的信息:‘)
    print(‘======输入Q退出======‘)
    if to_client_msg.upper() == ‘Q‘:
        break
    else:
        conn.send(to_client_msg.encode(‘utf-8‘))
# 关闭通道
conn.close()
# 关闭socket对象
server.close()

  注意:先运行server,然后再运行client,然后你会发现client这个文件再输出台的地方让你输入内容,你输入一个内容然后回车,你会发现server那边的控制台就输出了以client发送的内容

python之路--网络编程之socket

标签:基于   并且   chrome   socket   服务   输出   常用   优酷   工具   

原文地址:https://www.cnblogs.com/attila/p/10209798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!