Python基于socket实现TCP客户端和服务端

Python基于socket实现TCP客户端和服务端

目录

一、基于socket实现的TCP客户端

二、基于socket实现的TCP服务端

三、socket实现的多任务版TCP服务端

1、面向对象版本

一、基于socket实现的TCP客户端 import socket # 建立socket对象 # 参数一表示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'.encode('gbk') # 向服务器发送数据 client_socket.send(data) # 接收数据,必须要指定接收数据的大小,单位字节,最大4096,即4k recv_data=client_socket.recv(1024) # 接收的数据要进行decode()解码,发送的时候用啥编码就填啥编码 recv_data=recv_data.decode('gbk') print(recv_data) # 关闭连接 client_socket.close() 二、基于socket实现的TCP服务端 import socket # 建立socket对象 server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 如果服务器是一次性的,如果服务器结束后马上重新启动会出现一个错误,原因是地址和端口没有被释放 # OSError: [Errno 48] Address already in use # 如果想马上释放,要设置一下socket选项 server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) # 绑定IP和端口,如果在绑定IP时没有给定IP,默认是绑定本地IP server_socket.bind(('',7777)) # 设置监听(最大监听数),设置完后服务端会进入被动模式,不能主动连接客户端,只能被动地等待客户端的连接 server_socket.listen(128) # 等待客户端连接,连接上后,函数会返回客户端的Socket对象和地址信息 client_socket,ip_port=server_socket.accept() print(f'客户端{ip_port[0]}使用端口{ip_port[1]}连接成功...') # 接收客户端数据 data=client_socket.recv(1024) # 查看客户端发送的数据长度 if len(data)!=0:     data=data.decode('gbk')     print(f'客户端{ip_port[0]}使用端口{ip_port[1]}发送是数据是{data}') else:     print(f'客户端{ip_port[0]}使用端口{ip_port[1]}关闭了连接') # 给客户端发送数据 data='你好'.encode('gbk') client_socket.send(data) # 关闭客户端 client_socket.close() # 关闭服务端 server_socket.close() 三、socket实现的多任务版TCP服务端 import socket import threading def client_task(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=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客户端和服务端内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    opporeno8参数配置及价格

    opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

    魅蓝note6性能参数有哪些

    魅蓝note6性能参数有哪些,摄像头,蓝牙,魅蓝note6性能参数有哪些魅力蓝色Note6最好拍照。电池寿命更长。蓝色Note6使用高通 snapdragon 625

    公共CPU接口类型的详细描述

    公共CPU接口类型的详细描述,,我们知道CPU是电脑的大脑, CPU的处理速度直接决定电脑的性能, 那你知道CPU发展到现在, 都那些CPU接口类型吗.

    主板类型百科全书(基于芯片分类)

    主板类型百科全书(基于芯片分类),,电脑维修基础之主板型号熟悉,主板芯片型号区分,涵盖nVIDIA系列intel系列AMD系列主板型号,主板型号大全内容较

    设置总账参数|用友u8设置总账参数

    设置总账参数|用友u8设置总账参数,,1. 用友u8设置总账参数1、首先要点开数据权限控制设置;2、选择想要设置控制的单据;3、打开后看到左上角

    csgo参数设置|csgo怎么保存

    csgo参数设置|csgo怎么保存,,csgo怎么保存第一步下载csgo的官方版本。然后再下载一个5e对战平台,PS:5e的账号和csgo的账号不是一个账号。第

    移动apn设置|移动apn设置参数

    移动apn设置|移动apn设置参数,,移动apn设置参数1、打开手机系统设置界面应用,点击页面中的“移动网络”设置选项。2、进入移动网络设置页面

    均线最佳设置|均线最佳参数设置

    均线最佳设置|均线最佳参数设置,,1. 均线最佳参数设置所有指标包括kd macd均线,是根据已有价格计算得出,看指标落后于看价格分析,也就是k线。