基于tcp协议的套接字通信(简单版、循环版)

1、C/S    B/S模型

        client-----server
        browser-----server

    其中服务端必须具备:

        1、稳定运行,对外一直提供服务

        2、绑定一个固定的Ipod+port

2、互联网:

    2.1 物理连接介质

    2.2 互联网协议(互联网协议即计算机界的英语)

3、tcp协议:三次握手

    半连接池backlog=5

        限制的同一时刻的讲求数而非连接数

    四次挥手断开连接

 

基于tcp协议的套接字通信(简单版)

-------------------------------服务器端-----------------------------------
import socket    # 导入socket模块

# 1、买手机
phone=socket.socket(socket.AF_INFT,socket.SOCK_STREAM)    # tcp称为流式协议,udp称为数据报协议SOCK_DGRAM
print(phone)

# 2、插入/绑定手机卡
#phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 遇到服务务端存在四次挥手的time_wait状态下占用地址下使用这条命令可解决,需要加在bind上方
phone.bind((127.0.0.1,8080)) # 固定ip+port,需要客户端与之对应

# 3、开机
phone.listen(5) # 半连接池,限制的是请求数

# 4、等待电话连接
print('start....')
whilet True:: # 连接循环
    conn,client_addr=phone.accept()    #(三次握手建立的双向连接,(客户端的ip,端口))
    print('已经有一个连接建立成功',client_addr)

# 5、通信:收\发消息
    while True: # 通信循环
        try:
            print('服务端正在收数据...')
            data=conn.recv(1024) # 最大接收的字节数,没有数据会在原地一直等待收,即发送者发送的数据量必须>0bytes
            # print('===>')
            if len(data) == 0:break # 在客户端单方面断开连接,服务端才会出现收空数据的情况
            print('来自客户端的数据',data)
            conn.send(data.upper())
        except ConnectionResetError:
            break
    # 6、挂掉电话连接
    conn.close()


# 7、关机
phone.close()



--------------------------------客户端 --------------------------------
import socket


# 1、买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print(phone)
# 2、拨电话
phone.connect(('127.0.0.1',8080)) # 指定服务端ip和端口

 
# 3、通信:发\收消息
phone.send('hello'.encode('utf-8'))
# phone.send(bytes('hello',encoding='utf-8'))
data=phone.recv(1024)
print(data)


# import time
# time.sleep(500)
# 4、关闭
phone.close()

基于tcp协议的套接字通信(循环版)

-----------------------------------服务端-----------------------------------
import socket

# 1、买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #tcp称为流式协议,udp称为数据报协议SOCK_DGRAM
# print(phone)

# 2、插入/绑定手机卡
# phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
phone.bind(('127.0.0.1',8080))

# 3、开机
phone.listen(5) # 半连接池,限制的是请求数

# 4、等待电话连接
print('start....')
while True: # 连接循环
    conn,client_addr=phone.accept() #(三次握手建立的双向连接,(客户端的ip,端口))
    # print(conn)
    print('已经有一个连接建立成功',client_addr)

    # 5、通信:收\发消息
    while True: # 通信循环
        try:
            print('服务端正在收数据...')
            data=conn.recv(1024) #最大接收的字节数,没有数据会在原地一直等待收,即发送者发送的数据量必须>0bytes
            # print('===>')
            if len(data) == 0:break #在客户端单方面断开连接,服务端才会出现收空数据的情况
            print('来自客户端的数据',data)
            conn.send(data.upper())
        except ConnectionResetError:
            break
    # 6、挂掉电话连接
    conn.close()

# 7、关机
phone.close()


-----------------------------------客户端-----------------------------------
import socket

# 1、买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# print(phone)
# 2、拨电话
phone.connect(('127.0.0.1',8080)) # 指定服务端ip和端口

# 3、通信:发\收消息
while True: # 通信循环
    msg=input('>>: ').strip()
    phone.send(msg.encode('utf-8'))
    data=phone.recv(1024)
    print(data)

# 4、关闭
phone.close()

# 可多加几个客户端并同时开始运行就形成客户端循环运行

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值