Python网络编程【客户端与服务器通信】

一、将数据写在发送语句中【传统方式】

server端代码:

import socket
#服务器端将socket套接字赋给sock套接字
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#服务器端调用sock.setsockopt为这个socket对象设置值,包括(level,optname,value)
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#服务器调用sock.bind为这个socket对象绑定到一个地址上,它需要一个主机地址和端口组成的元组作为参数
sock.bind(('127.0.0.1',8000))
#服务器用sock.listen为这个socket开始TCP监听,参数可以为挂起的最大连接数量,该值至少为1,大部分程序设为5就可以
sock.listen(5)
#进行无限循环
while 1:
    #sock.accept被动接受TCP客户端的连接,等待连接的到来。
    cli_sock,cli_addr=sock.accept()
    #sock.recv()接受TCP数据,将cli_sock套接字接受的数据传递给rep嵌套字
    req=cli_sock.recv(4096)
    #cli_sock发送TCP数据,将string的数据发送到连接的套接字,返回值是要发送的字节数量
    cli_sock.send(b'hello world')
    #关闭套接字
    cli_sock.close()

client端代码:

import socket
#客户端将socket套接字赋给sock套接字
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#客户端调用sock.connect主动初始化服务器连接,参数为(hostname,port)
sock.connect(('127.0.0.1',8000))
#客户端调用sock.send向服务器发送数据
sock.send(b"GET/HTTP/1.1\r\nHost:127.0.0.1:8080\r\n\r\n")
#客户端使用套接字data代替sock.recv接受的数据值
data=sock.recv(4096)
#打印出来data
print(data)
#关闭套接字
sock.close()

运行演示:

首先运行启动服务器,再运行启动客户端,然后客户端与服务器建立连接,向服务器发送数据,然后接受服务器发送过来的字符数据b’hello world’。
在这里插入图片描述

二、将服务器和客户端封装起来【优化方式】

server端代码:

import socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

phone.bind(('127.0.0.1',8081))
phone.listen(5)

print('starting...')
while True:#链接循环
    conn,client_addr=phone.accept()
    print(client_addr)

    while True:#通信循环
        try:
            data=conn.recv(1024) #单位:bytes;
            # 1024代表最大接受1024个bytes
            print("客户端的数据:",data)
            conn.send(data.upper())
        except ConnectionError:
            break
    conn.close()
phone.close()

client端代码:

import socket
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',8081))

while True:
    msg=input('>>').strip()
    if not msg:continue
    phone.send(msg.encode('utf-8'))
    data=phone.recv(1024)
    print(data.decode("utf-8"))

phone.close()

运行演示:

先启动服务器,服务器输出“starting…” ,然后启动客户端,与服务器建立连接,然后在客户端可以输入消息,回车发送给客户端,客户端接收并显示出消息。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42257666/article/details/106790019