## =====================================================
#######server端#########
''' ==============TCP 连接的服务端============== 思路: 1.创建连接方法: socket.socket() 2.绑定地址和端口 3.监听客户端请求 4.接受客户端请求,并为之开启处理业务逻辑的线程 ========================================== 网络通信基本知识介绍: family: [指定地址簇,也就是IP地址的类型.常用一般有两个类型(IPv4,IPv6)] AF_INET = IPv4 AF_INET6 = IPv6 type: [表时数据川数的方式] SOCK_STREAM = 面向连接传输方式.[数据准确到达对端,如果丢失就重发,效率相对较慢] SOCK_DGRAM = 无连接的出输方式.[只管发送数据,不做发送校验.相对快点] proto: [传输协议] 一般有TCP,UDP等 ''' import socket import threading ## 定义一个方法,线程可以来调用该方法[即:你是干啥的?人家找你办啥事来了] import time def run(socket, address): # print(type(address)) # print(address) ## 向来访问的客户端反馈信息: [需要指定输入的编码格式] # 此处需要把输出的信息string类型的,转换为bytis,否则会报错.下面是两种转换方法: # 方法1: 直接用str.encode() 方法转换: # socket.send("你好,你说的事情没问题.".encode(encoding="utf-8")) # 方法2: 通过创建bytes对象,对string数据进行封装: # socket.send(bytes("你好,你说的事情没问题.", encoding="utf-8")) ## 持续通话 while True: for_cli_data = socket.recv(1024).decode("utf-8") if for_cli_data != "": print(for_cli_data) time.sleep(1) # socket.send(( "没问题clien,早饭你想吃啥?").encode('utf-8')) # 3.2 思维发散,自定义键盘输入信息,服务端与客户端进行通信,即聊天: print("请输入要对客户端说的话: ") str = input() socket.send(str.encode("utf-8")) ## 创建一个线程,family="线程地址簇";type=数据传输类型 socket_server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) ## 绑定地址和IP socket_server.bind(("127.0.0.1", 8888)) ## 进入监听状态 socket_server.listen() ## 无休止的循环,判断是否有请求 while True: ## 接受请求,并存储相应的信息 : # socket :网络通道,用来读写数据; # address :客户端IP地址; (socket, address) = socket_server.accept() ## 创建线程 # target :指定目标调用指定方法,即:干什么事情. # args :目标调用的参数元组(套接字,ip地址) therd = threading.Thread(target=run, args=(socket, address)) ## 启动线程 therd.start()
##=============================================================
##########client端##########
''' ==============TCP 连接的客户端============== 思路: 1.创建连接,(即socket实例): [开始准备,动身找人问个事情] 2.填写服务端的IP和端口号: [找到人家的的地址和口号] 3.连接服务端: [按照地址找他在哪] 4.获取数据: [找到了,人家给了信息] 接收服务端连接后发出的信息. 5.打印数据: [即:找人查资料,别人给了信息后,自己拿着信息干啥处理] ========================================== ''' import socket ## 1.创建连接 import time socket_client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) ## 2.3.连接服务端,填写服务端的IP和端口号,开始连接 socket_client.connect(("127.0.0.1", 8888)) ## 持续通话 while True: ## 3. 发送数据到服务端: [即:向服务端提出需求] # socket_client.send("server,明天帮我带早餐可以吗?".encode("utf-8")) # 3.2 思维发散,自定义键盘输入信息,服务端与客户端进行通信,即聊天: print("请输入想对服务端说的话: ") str = input() socket_client.send(str.encode("utf-8")) ## 4.: 获取数据:[需要指定一个bufsize,即缓冲区,存放服务端反馈的信息] foe_server_data = socket_client.recv(1024).decode("utf-8") if foe_server_data != "": ## 5.打印数据: [即:找人查资料, 别人给了信息后, 自己拿着信息干啥处理] # 需要对接收到的bytes数据,进行转换为string类型,并指定数据类型 # print(foe_server_data.decode("utf-8")) print(foe_server_data) time.sleep(1)