自学python实例_tcp服务器

自学python实例_udp聊天窗口
之前用udp实现了,一个简单的聊天窗口,有兴趣的可以看上面链接.用完之后你会发现,这upd聊天窗口太low了,只能你发一次我再发一次,而且你还会发现一点,当你用udp聊天窗口的时候,你发给对方消息,对方不一定就能收到,这样就很尴尬啦.
那么接下来,我给大家介绍另一个实现方式,我们可以使用tcp来实现.因为tcp有三次握手和四次挥手的关系,保证了我们的数据能传送到对方手上.
话不多说,先上代码

import socket
def main():
	# 1. 创建服务器的套接字 tcp_server_socket 这个套接字用来监听了
	tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
	# 2. 绑定信息
	tcp_server_socket.bind(("", 7898))
	# 3. 等等接收数据 listen
	tcp_server_socket.listen(128)
	while True:
		print("等待一个客户端的到来......")
		# 4. 接收数据  这是拆包  创建了第二个套接字 nweclient_socket
		nweclient_socket, client_addr = tcp_server_socket.accept()
		print("一个新的客户端到来了 %s" % str(client_addr))
		while True:
			# 接收客户端发送过来的请求 这个时候 recv不是元组  recvfrom 是元组
			recv_data = nweclient_socket.recv(1024)
			print("客户端发过来的请求内容是: %s" % recv_data.decode("gbk"))
			# 如果recv解堵塞,那么有两种情况
			# 1. 客户端发送过来数据
			# 2. 客户端关闭了
			if recv_data.decode("utf-8") == "exit":
				nweclient_socket.send("谢谢,你的支持!".encode("utf-8"))
				break
			# 如果对方关闭了客户端,那么会接收到一个空的数据,那么下面就会成立
			elif not recv_data.decode("utf-8"):
				nweclient_socket.send("谢谢,你的支持!".encode("utf-8"))
				break				
			else:
				nweclient_socket.send("好的,你还要继续服务吗,不服务输入exit".encode("gbk"))
		# 服务器这个套接字后 关闭
		nweclient_socket.close()
		print("已经服务完毕!")
	# 5. 关闭服务器
	tcp_server_socket.close()
if __name__ == "__main__":
	main()

这里我把服务器的发送,默认成了自动回复,参考一下最上面的udp聊天窗口的链接,自己试试看就可以实现啦!
这个我想告诉大家的是:
1.tcp_server_socket.listen(128) 这里我把套接字设置为了监听的状态,当有一个新的请求过来的时候
2.nweclient_socket, client_addr = tcp_server_socket.accept() 就会创建一个新的套接字.nweclient_socket为这个客户访问,client_addr记录了这个客户端的ip地址和端口号
3.下面的操作就和udp一样呀,但是要注意我们聊天完之后,关闭的是 新创建的套接字
4.如果我们要关闭我们的服务器,那么就 tcp_server_socket.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值