python编写TCP通信

一、TCP客户端(Client)
二、TCP服务器(Server)

一、TCP_Client:
1.创建套接字
2.链接服务器(sendto里面的to, tcp为打电话模型,首先且只需拨通一次号码)
3.发送数据(sendto 里面的send, 无需加收件方地址)
4.关闭套接字


# TCP_client learning
import socket

def main():

	# 1.创建socket
	tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # STREAM表示TCP传输
	
	# 2.链接服务器
	tcp_socket.connect(("192.168.139.128",7890))  # 相当于打电话先拨通对方号码

	# 3.发送数据
	# tcp_socket.send(b"hahhah")  # 相当于把udp里的sendto分成to+send,写信需要每封信都写地址,打电话只要拨一次号码
	send_data = input("请输入要传输的数据:")
	tcp_socket.send(send_data.encode("utf-8"))
	
	# 4.关闭套接字
	tcp_socket.close()


if __name__ == "__main__":
	main()

二、TCP_Server:(为了让别人能联系到你,是被动的)
1.买一个手机(建立套接字)
2.买一个电话卡(绑定地址)
3.设置成响铃模式(socket建立初期是主动去链接别人的,此处让其成为listen被动监听他人信息)
4.等待他人拨号(阻塞,只有当客户端链接该服务器时解阻)
5.接收客户端数据,响应客户端请求(新建一个套接字与客户端通信,可以循环为一个客户端服务,以及同时为多个客户端服务(多任务))
6.关闭两个套接字

# TCP服务器
import socket

def main():
	# 1.买一个电话(建立一个套接字)
	tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

	# 2.买一个电话卡(绑定服务器地址)
	tcp_server.bind (("",7890))

	# 3.设置为响铃模式(让默认为主动链接他人的套接字变为被动监听来电)
	tcp_server.listen(128)  
	
	while True:  # 循环等待一个客户端的到来
		print ("等待一个新客户端的到来")
		# 4.等待他人拨号(等待客户端链接该服务器)
		new_tcp_server, client_addr = tcp_server.accept()  # 元组的拆分,新的套接字以及客户端地址
		print("新的客户端的地址是:",str(client_addr))  # 显示链接的客户端地址
		
		while True:  # 循环为一个客户端服务多次
			# 5.接收并响应客户端(显示客户端地址,分配新套接字作为通信客服i)
			recv_data = new_tcp_server.recv(1024)  # 无需from,已经在client_addr 中显示,
			print("客户端发送的数据是:",recv_data.decode("gbk"))  # 显示客户端的请求
		
			#  如果new_tcp_server.recv(1024)解阻塞,有两种情况
			#  1.客户端发送数据,接收到的recv_data元组不为空
			#  2.客户端关闭,接收到的recv_data元组为空
			if recv_data:  # 如果收到的数据不为空,表示客户端仍在请求服务,继续为其服务
				send_data = ("accept")    
				new_tcp_server.send(send_data.encode("utf-8"))  # 向客户端回应已收到请求
			else:  # 如果收到数据为空,说明客户端已经关闭,结束为这个客户端提供服务
				break
		
		# 6.关闭(关闭两个套接字)	
		new_tcp_server.close()  # 结束为一个客户端服务
		print("已经结束为该客户端提供的服务")
	tcp_server.close()


if __name__ == "__main__":
	main()



PS: 此处编写的是同一个服务器为多个客户端依次服务多次。同时为多个客户端服务需要学习“多任务”,后续会补充。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值