7.2---python通信之:客户端与服务端键入聊天程序

## =====================================================

#######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)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值