Python tcp socket,python tcp服务端
本文主要介绍Python的基于socket的TCP客户端和服务器,以及基于socket的多任务版本的TCP服务器。以下需要相关操作的伙伴可以参考一下。
00-1010 1.基于socket 2的TCP客户端。基于socket 3的TCP服务器。基于socket 1的多任务TCP服务器。面向对象的版本
目录
导入插座
#创建一个套接字对象
#参数一表示IP地址类型(AF_INET是IPV4,AF_INET6是IPV6),参数二表示连接类型(SOCK_STREAM表示TCP,SOCK_DGRAM表示UDP)
client _ socket=socket . socket(socket . af _ inet,socket.sock _ stream) #代表(ipv4,TCP)
#连接到服务器(元组中填充了目标ip地址和端口号)
client _ socket . connect(( 127 . 0 . 0 . 1 ,7777))
#准备数据,需要转换成二进制数据。在encode()中填充本地字符串编码格式,在mac和linux中填充utf-8。
data=hello 。编码(“gbk”)
#向服务器发送数据
client_socket.send(数据)
#要接收数据,必须指定接收数据的大小,单位字节,最大为4096,即4k。
recv _ data=client _ socket . recv(1024)
#接收到的数据要用decode()解码,发送时用什么码填充。
recv _ data=recv _ data . decode( gbk )
打印(接收数据)
#关闭连接
client _套接字. close()
一、基于socket实现的TCP客户端
导入插座
#创建一个套接字对象
server _ socket=socket . socket(socket。AF_INET,socket。袜子_流)
#如果服务器是一次性的,如果服务器完成后立即重启,会出现错误,因为地址和端口没有释放。
# OSError: [Errno 48]地址已被使用
#如果您想立即释放它,请设置套接字选项。
server _ socket . setsockopt(socket。SOL_SOCKET,SOCKET。SO_REUSEADDR,True)
#绑定IP和端口。如果在绑定IP时没有给定IP,默认是绑定本地IP。
server_socket.bind(( ,7777))
#设置显示器(显示器的最大数量)。设置后,服务器会进入被动模式,无法主动连接客户端,只能被动等待客户端的连接。
server_socket.listen(128)
#等待客户端连接。连接后,该函数将返回客户端的套接字对象和地址信息。
客户端套接字,ip端口=服务器套接字。接受()
Print(f client {ip_port[0]}使用端口{ip_port[1]} .)
#接收客户端数据
data=client_socket.recv(1024)
#检查客户端发送的数据长度
if len(数据)!=0:
data=data.decode(gbk )
Print(f client {ip_port[0]}使用端口{ip_port[1]}发送yes数据和{data} )
else:
Print(f client {ip_port[0]}使用端口{ip_port[1]} 关闭了连接)
#向客户端发送数据
Data= Hello 。编码(“gbk”)
client_socket.send(数据)
#关闭客户端
client _套接字. close()
#关闭服务器
server_socket.close()
二、基于socket实现的TCP服务端
导入插座
导入线程
定义客户端任务(客户端套接字,ip端口):
打印(ip端口,“加入连接”)
#继续接收来自客户端的消息
而True:
data=client_socket.recv(1024)。解码(“gbk”)
if len
(data)!=0:
print(f客户端{ip_port[0]}发来的信息是{data})
else:
print(f客户端{ip_port[0]}已经断开连接)
break
send_data=(Hello--+data).encode(gbk)
client_socket.send(send_data)
if __name__ == __main__:
server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
server_socket.bind((,7777))
server_socket.listen(128)
# 循环接收客户连接
while True:
client_socket,ip_port=server_socket.accept() # 会一直等待接收连接
t_client=threading.Thread(target=client_task,args=(client_socket,ip_port))
t_client.setDaemon(True)
t_client.start()
1、面向对象版本
基于socket实现的多任务版TCP服务端(面向对象) import socket import threading class SocketServer(object): def __init__(self, port): self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) self.server_socket.bind((, port)) self.server_socket.listen(128) def start(self): # 循环接收客户连接 while True: client_socket, ip_port = self.server_socket.accept() # 会一直等待接收连接 t_client = threading.Thread(target=self.client_task, args=(client_socket, ip_port)) t_client.setDaemon(True) t_client.start() def client_task(self,client_socket, ip_port): print(ip_port, 加入连接) # 持续接收客户端的消息 while True: data = client_socket.recv(1024).decode(gbk) if len(data) != 0: print(f客户端{ip_port[0]}发来的信息是{data}) else: print(f客户端{ip_port[0]}已经断开连接) break send_data = (Hello-- + data).encode(gbk) client_socket.send(send_data) if __name__ == __main__: server_socket=SocketServer(7777) server_socket.start()
到此这篇关于Python基于socket实现TCP客户端和服务端的文章就介绍到这了,更多相关socket实现 TCP客户端和服务端内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。