2018-08-07 day17 网络编程基础以及socket

2018-08-07  本文已影响0人  Kris_Shin

socket 服务器

socket编程(套接字):指的是通过代码来创建实现通信的两个端(服务器和客户端)

socket一般可以基于TCP和UDP实现客户端和服务器之间的可靠传输和不可靠传输

python中的内置模块socket可以支持socket编程

import socket

通过socket实现服务器端功能

1.创建服务器套接字对象

# server = socket.socket(family=socket.AF_INET, type=SOCK_STREAM)
server = socket.socket()

2.绑定ip地址和端口

server.bind(('10.7.181.92', 8080))

3.监听请求

server.listen(20)
# 保证服务器一直处于一直启动的状态
while True:

4.接收客户端的请求

client, addr = server.accept()
print(addr)

5.给客户端发送信息

# client.send('HTTP/1.1 200 OK\r\n\r\n', encoding='utf-8')
str1 = input()
client.send(bytes(str1, encoding='utf-8'))
data = client.recv(1024)
str1 = data.decode(encoding='utf-8')
print(str1)

6.关闭连接

client.close()

socket 客户端

1.创建套接字对象

client = socket.socket()

2.连接服务器

client.connect(('10.7.181.85', 8080))

3.接收信息

data = client.recv(1024)
print(data.decode(encoding='utf-8'))
str1 = input()

4.发送数据

client.send(str1.encode(encoding='utf-8'))

http 协议

导入第三方库

from requests import request

# https://www.apiopen.top/satinApi?type=1&page=1
# GET请求:参数以?形式拼接到url地址后面,参数名=值得形式,多个参数用&隔开

1.确定url

url = 'https://www.apiopen.top/satinApi?type=1&page=1'

2.发送请求

response = request('GET', url)
print(type(response), response)
  • 1.以字符串形式获取相应提(服务器返回得数据)
text = response.text
print(type(text), text)
  • 2.以json形式获取响应体
json = response.json()
print(type(json), json)
  • 3.以二进制形式获取响应体
content = response.content
print(type(content), content)

作业

client.py

import socket
import os


def main():

    ip = '10.7.181.92'
    os.chdir('D:/MyCourse/Cultivate/Part2-NetworkProgram/day01-网络编程')
    client = socket.socket()
    client.connect((ip, 8089))
    print('welcome to contact me')
    while True:
        # 发送信息
        reply = input('>>>').encode()
        client.send(reply)
        # https://blazepress.com/.image/t_share/MTQxMzU1NzI2ODg2Njc2Mjkx/jannik-obenhof-travel-photography-instagram-18jpg.jpg
        content = client.recv(1024)
        print(content.decode(encoding='utf-8'))


if __name__ == '__main__':
    main()

server.py

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


def main():
    server = socket.socket()
    ip = '10.7.181.92'
    server.bind((ip, 8089))
    server.listen(10)
    reUrl = r'https?://\w+\.\w+(\.\w+)?[\w\-/&%^$@#!.]+'
    os.chdir('D:/MyCourse/Cultivate/Part2-NetworkProgram/day01-网络编程')
    while True:
        serverM, addr = server.accept()
        print(addr)
        while True:
            msg = serverM.recv(1024).decode(encoding='utf-8')
            # 接收
            if re.fullmatch(reUrl, msg):
                if re.findall(r'\.(jpg|jpeg|png|bmp|gif|ico|tif)$', msg):
                    response = request('GET', msg)
                    img = response.content
                    with open('./Case/999.jpg', 'wb') as f:
                        f.write(img)
                    serverM.send('收到!!'.encode())
                else:
                    response = request('GET', msg)
                    json = response.json()
                    with open('./Case/333.json', 'wb') as f:
                        f.write(json)
                    serverM.send('收到!!'.encode())
            else:
                print(msg)
            content = input('>>>').encode()
            serverM.send(content)


if __name__ == '__main__':
    main()
上一篇 下一篇

猜你喜欢

热点阅读