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

举报
振华OPPO 发表于 2022/04/20 22:15:07 2022/04/20
【摘要】 一、将数据写在发送语句中【传统方式】 server端代码:import socket#服务器端将socket套接字赋给sock套接字sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#服务器端调用sock.setsockopt为这个socket对象设置值,包括(level,optname,value)sock.setsockopt(s...

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

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…” ,然后启动客户端,与服务器建立连接,然后在客户端可以输入消息,回车发送给客户端,客户端接收并显示出消息。
在这里插入图片描述
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。