一、写作背景
最近在面试准备和实际工作中,都有用到网络编程的相关知识,为了提高效率,就在网上查阅了相关资料,学习过程中,感觉网络编程挺有趣的,从最开始客户端只能发送一个请求,到客户端可以依次发送多个请求,再到最后用多线程方式,可以支持多个客户端同时请求,不断打怪升级。于是将此记录下来,方便自己以后回顾,当然对别人哪怕有一点点帮助,都很开心啦
二、流程图
三、代码实现
3.1 服务端实现
server.py
import socket
import threading
#处理客户端函数
def handle_client(conn_socket):
#5.接收数据
recv_data=conn_socket.recv(1024)
print("接收到的数据:",recv_data.decode())
#6.发送数据
conn_socket.send("客户端你的数据我收到了".encode())
#7.关闭套接字
conn_socket.close()
if __name__ == '__main__':
#1.创建服务器套接字对象
tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.设置端口复用
tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
#3.绑定ip地址和端口号
#如果bind中的参数第一个ip地址元素设置为"",默认为本机ip地址
tcp_server_socket.bind(("",80))
#设置服务器等待排队连接的最大数量
tcp_server_socket.listen(128)
#使用循环接收客户端的连接请求
while True:
#4.等待客户端的连接请求
conn_socket,ip_port=tcp_server_socket.accept()
print("客户端地址:",ip_port)
#使用多线程去接收多个客户端的请求
sub_thread=threading.Thread(target=handle_client,args=(conn_socket,))
sub_thread.start()
tcp_server_socket.close()
3.2 客户端实现
client.py
import socket
if __name__ == '__main__':
#1.创建客户端套接字对象
tcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#2.和服务器建立连接
tcp_client_socket.connect(("127.0.0.1",80))
#3.发送数据
tcp_client_socket.send("hello 你好".encode(encoding="utf-8"))
#4.接收数据
recv_data=tcp_client_socket.recv(1024)
print(recv_data.decode())
#5.关闭客户端套接字
tcp_client_socket.close()
四、测试
4.1 客户端输出:
4.2 服务端输出:
五、思考
5.1 服务器如何返回一个html页面给客户端呢?
5.2 服务器如何返回一个附件给客户端呢?