Python网络编程【客户端与服务器通信】
【摘要】 一、将数据写在发送语句中【传统方式】 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)