美文网首页
千锋的第十七天

千锋的第十七天

作者: 堪怜咏絮才 | 来源:发表于2018-08-07 20:59 被阅读96次

一、scoketServer(创建服务器)

1.创建服务器scoket编程对象
server = socket.socket(family=socket.AF_INET, type=socket.SCOK_STREAM)
family:确定服务类型
AF_INET--->ipv4
AF_INET6--->ipv6
ipv4和ipv6的区别在于容纳的数量不一样,显然ipv6多
type:确定传输类型
SOCK_STREAM-->TCP协议
SOCK_DGRAM-->UDP协议
2.绑定ip地址和端口
地址格式:(ip地址字符串,端口号)
端口号:用来区分一个计算机中不同的服务,范围是0-65535
注意:1.其中0-1024是'著名端口',用来绑定一些特殊服务的,一般不使用。
2.同一时间一个端口只能绑定一个服务
3.监听请求
参数:用来限制一次性能够接收的客户端请求的数量(最大的服务量)
4.接收客户端的请求
accept()会阻塞线程,到有客户端给这个服务器发送请求,才会开始执行
5.给客户端发送消息
send(数据):数据必须是二进制数据(bytes)类型
字符串转二进制:
bytes(字符串,encoding=编码方式)
字符串.encode(encoding=编码方式)
接收从客户端发来的消息
6.关闭链接

import socket                           #导入socket
server  = socket.socket()               #建立一个服务器
server.bind(('10.7.181.112', 10000))    #绑定一个地址,设置一个端口
server.listen(50)                       #监听请求,括号里面参数表示允许最大的等候请求的数量

while True:                             #让我们建立的服务器一直处于运行状态
    client, addr = server.accept()      #accept()函数会返回一个会话和一个地址,acept会阻塞线程,直到接收到请求为止

    
    client.send('How do you do?'.encode(encoding='utf-8'))  #发送内容给客户端,要将字符串转成二进制编码

    data = client.recv(1024)             #接收从客户端发来的信息,保存到函数data里面,接收到的数据也是二进制,括号里面可以设置最大的字节数
    print(data.decode(encoding='utf-8')) #将接收到的二进制数据转化成字符

    client.close()
    
    """
    注意:不管是发送还是接收都是通过会话来完成的。而且都是以二进制的形式
    字符串转二进制:(给客户端发送的时候用)
                1.  bytes(字符串,编码方式)
                2.  字符串.encode(encoding=编码方式)
                
    二进制转字符串:(接收客户端的信息时候用)
                1.str(二进制数据,encoding='utf-8')
                2.二进制数据.decode(encoding='utf-8')
    """

二、socketClient

1.创建套接字对象
2.连接服务器
3.接收信息
4.发送信息

import socket                               #导入socket模块

while True:                                 #让我们的程序一直运行
    client = socket.socket()                #创建套接字对象
    
    client.connect(('10.7.181.112', 10000)) #连接服务器
    
    data = client.recv(1024)                #接收从服务器发来的数据
    print(data.decode(encoding='utf-8'))    #将二进制转化成字符
    
    client.send('How do you do?'.encode(encoding='utf-8'))      #给客户端发送信息,要将字符串转化成二进制

三、http

1.确定url
url:网址
get请求,参数以问号(?)的形式拼接到url后面,参数名=值的形式,多个参数用&隔开
2.发送请求
a.以字符串的形式获取响应体(服务器返回的数据)
b.以json的形式获取响应体
c.以二进制的形式获取响应体

from requests import request                            #导入request

url = 'https://www.apiopen.top/satinApi?type=1&page=1'  #确定网址,注意后面是个字符串

response = request('GET', url)                          #发送请求,以GET的方式获取数据,两个参数,一个是获取数据的方式,一个是网址

text = response.text                                    #以字符串的形式获取内容,text(文本),就是字符串
print(text, type(text))

json = response.json                                    #以json的形式获取内容
print(json, type(json))

content = response.content                              #以二进制的形式获取内容
print(content, type(content))

作业

写一个两个人的聊天系统,可以实现双向聊天功能。
如果发送的是普通的文字就直接打印,如果发送的文字是’拜拜’就关闭连接,
如果是一个网络地址就获取数据(保存到文本文件中),如果是图片地址就下载图片到本地

服务器
import socket                           #导入socket
import re
str1 = '拜拜'
server = socket.socket()                #建立一个套接字
server.bind(('10.7.181.112', 10000))    #绑定一个地址
server.listen(10)                       #监听请求

while True:                             #让监听一直处于运行状态
    client, addr = server.accept()      #接收会话和地址
    while True:
        data = client.recv(1024*1024)
        content = data.decode(encoding='utf-8')
        if str1 in content:
            print(content)
            client.close()
            break
        else:
            print(content)

        message = input('请输入你想发送的内容:')
        client.send(message.encode(encoding='utf-8'))
客户端
import socket
import re
from requests import request
str2 = '拜拜'
while True:
    client = socket.socket()
    client.connect(('10.7.181.112', 10000))

    content = input('请输入你想说的话:')
    client.send(content.encode(encoding='utf-8'))

    data = client.recv(1024)
    try:
        content = data.decode(encoding='utf-8')
        re_str = r'^http'
        value = re.search(re_str, content)
        if not value:
            print(content)
        else:
            response = request('GET', content)
            text = response.text
            with open('./文本文件.txt', 'w', encoding='utf-8') as f:
                f.write(text)
    except:
        with open('./图片.jpg', 'w') as f:
            f.write(data)

相关文章

  • 千锋的第十七天

    一、scoketServer(创建服务器) 1.创建服务器scoket编程对象server = socket.so...

  • 千锋的第七天

    一、函数的作用 1、当同一个功能的代码需要重复写多次的时候2、当功能发生改变,需要修改多个地方的时候 二、函数的定...

  • 千锋的第十一天

    一、pygame事件 二、鼠标事件的运用 三、鼠标点击事件 四、动画效果(关键在于理解动画是一张张的图片展示出来的...

  • 千锋的第十八天

    一、多线程技术1 python内置的threading模块,可以支持多线程 所有的进程默认都有一个线程(一般叫这个...

  • 千锋的第十九天

    作业:

  • 千锋的第十四天

    一、重写 a.完全重写:重新实现从父类继承下来的方法,重写后,子类再调用这个方法的时候,就调用自己的方法b.保留父...

  • 千锋的第十五天

    一、正则表达式的符号 正则表达式:用来做字符串查找、匹配、切割用的一种工具正则表达式:是一个符合正则规范的字符串m...

  • 千锋的第十天

    一、文件的封装 总结:load(下载)--->读取json文件的内容,读出来的结果返回的是json最外层的数据形式...

  • 千锋的第十二天

    一、迭代器和生成器 生成器:a.可以看成是一个可以存储多个数据的容器,需要里面数据的时候就生成一个,里面的数据只能...

  • 千锋的第十三天

    一、内置内属性 1、类.name---->获取类的名字(字符串)2、类.doc------>获取说明文档3、类.d...

网友评论

      本文标题:千锋的第十七天

      本文链接:https://www.haomeiwen.com/subject/ipwavftx.html