网络编程中多任务服务端搭建

好的,还是习惯性的问候大家一句,大家好呀!今天我们带来一个小项目的讲解,说是项目但也不完全算是,我们知道我们平时上网都是在不断向服务器发送各种请求,那么大家有没有想过我们自己也可以搭建一个小小的服务器呢,今天就带大家搭建一个简单的多任务版的服务器
下面我给出我的代码和详细注释:

服务端的搭建

import threading #大家知道多线程可以让我们访问以及效率得到质的提升,所以我们这里的多任务借用了多线程高效率的思想进行多任务开发。
import socket #Socket模块的主要目的就是帮助在网络上的两个程序之间建立信息通道,这个模块也是我们用python搭建服务器的必备模块
def handle(new_client,ip_port): #就是套接字和ip地址等通信必备数据
    while True:
        new_recv = new_client.recv(1024) #设置接受客户端的最大数据为1024也就是1G
        if new_recv:#判断是否有客户端数据传入
            new_recv_content = new_recv.decode("gbk")
            print("接收到的客户端信息为:",ip_port)
            send_date = "客户端你的请求我已经收到了,正在处理."
            new_client.send(send_date.encode("gbk"))
        else: #如果没有数据传入就else
            print("客户端已经下线")
            break
    new_client.close() #关闭当前套接字,与客户端结束通信,服务端进入等待模式
def main(): #定义一个main函数
	#第一步创建我们的服务端套接字,关于套接字是什么大家可以在网上找一下,这里不进行详细的解释,
	#一句话就是我们只要涉及到网络通信什么的都要用到套接字,套接字相当于是一个基础,给其他任务的进行提供平台这样一个角色。
    tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
#套接字创建好了,我们需要让我们服务器的端口号可以不断的复用,而不是当一个任务占用后就一直占用,导致端口始终处于忙碌状态。    
	tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)#True代表确认端口复用,默认为False
    tcp_server_socket.bind(("",9090)) # 绑定端口号,注意是两个括号,不要少写了,“”空字串是接受客户端的ip地址等信息进行连接用
    tcp_server_socket.listen(128) #监听,就是这个服务器同时可以关注128个客户端发送请求,这里我随便设置的是128,当然129、154等都都可以。
    while True: # 注意注意!!!这里很重要,while True表示服务当一直循环,而不是进行了一次通信后就自动关闭,保证了多任务的进行!!!
        new_client,ip_port = tcp_server_socket.accept() #接受客户端请求,这里我在网上找了一个关于accept的解释,我觉得讲的还挺好,在这里会有一个套接字的转变,大家可能会犯错!!!
        #accept默认会阻塞进程,直到有一个客户连接建立后返回,它返回的是一个新可用的套接字,这个套接字是连接套接字。此时我们需要区分两种套接字,一种套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,一个套接字会从主动连接的套接字变身为一个监听套接字;
        #而accept返回是一个连接套接字,它代表着一个网络已经存在的点点连接。自然要问的是:为什么要有两种套接字?原因很简单,如果使用一个描述字的话,那么它的功能太多,使得使用很不直观,同时在内核确实产生了一个这样的新的描述字。
        new_thread = threading.Thread(target=handle,args=(new_client,ip_port)) # 创建子线程,并且调用handle函数对客户端请求进行处理
        new_thread.setDaemon(True) #守护主线程
        new_thread.start() #开启子线程
if __name__ == '__main__':
    main() #调用main函数

客户端的搭建

相比于服务端,客户端搭建要简答容易的多,步骤也少的多,下面大家跟着我来搭建一下

import socket #同样导入模块

#第一步创建套接字
tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#第二步请求连接,这里的“”不再是空而是我们本地网络的ip地址,大家不知道在哪找的话,我在文章末尾会给大家说,这里先跳过,9090是我们刚才搭建的服务端的端口号
tcp_client_socket.connect(("10.37.127.216",9090))
#发送数据,编码为gbk格式
tcp_client_socket.send("你好".encode("gbk"))
#接受服务端发送回来的数据
recv_date = tcp_client_socket.recv(1024)
#对服务端发来的数据进行解码
recv_content = recv_date.decode("gbk")
print(recv_content)
#关闭与服务端的连接,结束通信
tcp_client_socket.close()

怎么找本地网络ip呢?
第一步:win+r 输入cmd 回车
第二步:在这里插入图片描述
如果是linux系统就输入ifconfig 然后回车
在这里插入图片描述
大家找到自己的ipv4地址,这个就是本地网络ip,我这里连的是无线网,大家看自己是什么。

结果截图展示

客户端的界面:
在这里插入图片描述
服务端的界面:
在这里插入图片描述
客户端多次运行请求偶的服务端:
在这里插入图片描述

总结:

服务端搭建大致步骤:
1.创建服务端套截止 2.端口复用并绑定端口号 3.服务端监听 4.接受客户端请求 5.创建子线程并调用handle函数处理客户端请求 6.写handle函数,要注意写在main函数前面因为main函数在后main才调用 7.设置接受数据大小 8.对接受到的数据进行解码 9.返回给客户端数据,并编码 10.关闭与客户端的套接字

客户端搭建大致步骤:
1.创建套接字 2.请求与服务端连接 3.发送数据到服务端 4.接受服务端发来的数据,并解码 5.关闭与服务端的套接字

我们的服务端和客户端的搭建也就这样草草结束了hhh,大家可以在自己的pycharm中进行搭建一下,对了,客户端和服务端是两个.py文件,大家要多动手试试,我觉得搭建成功还挺有成就感的哈哈哈哈哈
大家有什么好的意见或者不懂得地方都可以在评论区打出来,谢谢大家的耐心观看

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小熊佩萁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值