网络通信——python

一、socketServer

import FileManager
# 1.什么是socket
"""
socket又叫套接字,指的是实现通信的两个端。
套接字分为服务器套接字和客户端套接字两种。 服务器套接字会绑定一个固定的ip然后等待客户端来连接它,正常情况下一个服务器是可以同时和多个客户端保持连接的;客户端套接字不需要绑定IP,在需要的时候主动连接服务器套接字。
"""
# 2.socket编程
"""
用代码实现能够通信的服务器和客服端。
python中提供了一个模块叫socket专门用来支持socket编程的
"""
# 3.服务器套接字
from socket import socket


def main():
    """"""
    # 1.创建套接字对象(买电话机)
    """
    socket(family, type)   -  创建套接字对象
    family  -  ip地址类型:AF_INET(ipv4)、AF_INET6(ipv6)
    type  -  传输协议类型: SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)
    """
    server = socket()

    # 2.绑定IP和端口(插电话线)
    """
    套接字对象.bind((ip地址,端口号))
    ip地址  -  字符串,运行当前服务器程序的计算机的ip地址(10.7.190.131)
    端口号  -  整数, 范围是0~65535,其中0~1024是著名端口(同一时间同一台计算机不能同时使用相同的端口)。端口就是用来区分同一台计算机上不同服务(程序)
    """
    server.bind(('10.7.190.131', 12344))

    # 3.监听请求
    # server.listen(最大通信的数量)
    server.listen(200)

    # 4.等待客户端的连接
    while True:
        print('等待...')
        # 5.接受客户端的请求(接电话) - 这句代码会阻塞线程,直到有客户端的请求才会执行
        connect, address = server.accept()
        # print(type(connect), type(server))

        print('建立连接成功!', address)
        # 6.接受消息(别人说我听)
        # connect.recv(一次性能够接受的最大的字节数)   -   返回值就是接收到的数据
        re_data = connect.recv(1024)
        print(type(re_data), re_data.decode())

        # 7.发送消息(我说别人听)
        # 发送网页
        # m = FileManager.read_text_file('test.html')
        # message = 'HTTP/1.1 200 OK\r\n\r\n '+m
        # connect.send(message.encode())
        # 发送文字消息
        message = input('>>>')
        connect.send(message.encode())

        # 8.关闭连接
        connect.close()

if __name__ == '__main__':
    main()

二、socketClient

from socket import socket
# 1.创建套接字对象
client = socket()

# 2.向服务器发送请求(打电话)
client.connect(('10.7.190.131', 12344))

# 3.发送消息
message = input('>>>')
client.send(message.encode(encoding='utf-8'))

# 4.接收消息
re_data = client.recv(1028)
print(re_data.decode(encoding='utf-8'))

三、持续聊天的服务器

rom socket import socket

server = socket()
server.bind(('10.7.190.131', 12344))
server.listen(100)
while True:
    print('等待....')
    conection, address = server.accept()

    while True:
        message = input('自己:')
        conection.send(message.encode(encoding='utf-8'))
        if message in ['拜拜', '再见']:
            conection.close()
            break

        re_message = conection.recv(1024).decode(encoding='utf-8')
        print(f'{address[0]}:{re_message}')
        if re_message in ['拜拜', '再见']:
            conection.close()
            break

四、持续聊天客户端

from socket import socket

client = socket()
client.connect(('10.7.190.131', 12344))

while True:
    re_message = client.recv(1024).decode(encoding='utf-8')
    print(f'10.7.190.131:{re_message}')
    if re_message in ['拜拜', '再见']:
        client.close()
        break

    message = input('>>>')
    client.send(message.encode(encoding='utf-8'))
    if message in ['拜拜', '再见']:
        client.close()
        break

五、发送图片的服务器

from socket import socket

server = socket()
server.bind(('10.7.190.131', 12346))
server.listen(100)
while True:
    print('等待....')
    conection, address = server.accept()

    # 发送图片
    with open('files/QQ20200826-3.png', 'rb') as f:
        image_content = f.read()
    # 发送文件前需要先发送文件大小
    length = str(len(image_content))
    conection.send(length.encode(encoding='utf-8'))

    # 发送文件数据
    conection.send(image_content)

六、接受图片的客户端

from socket import socket

server = socket()
server.bind(('10.7.190.131', 12346))
server.listen(100)
while True:
    print('等待....')
    conection, address = server.accept()

    # 发送图片
    with open('files/QQ20200826-3.png', 'rb') as f:
        image_content = f.read()
    # 发送文件前需要先发送文件大小
    length = str(len(image_content))
    conection.send(length.encode(encoding='utf-8'))

    # 发送文件数据
    conection.send(image_content)

你可能感兴趣的:(python,socket)