socket套接字

socketsocket

什么是socket?tcp

         socket是应用层与TCP/IP协议族通讯的中间软件抽象层,它是一组接口,它把复杂的TCP/IP协议族隐藏在socket接口后面,对用户来讲,一组简单的接口就是所有。spa

为何使用socket?code

         socket帮咱们把复杂的TCP/IP协议族封装好了,咱们只须要调用socket的接口。blog

怎么用?接口

         基于tcp的套接字(socket):ip

服务端:服务端就至关于手机通讯过程utf-8

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

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

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

#四、等待电话链接
print('start....')
conn,client_addr=phone.accept() #(三次握手创建的双向链接,(客户端的ip,端口))
# print(conn)
print(client_addr)

#五、通讯:收\发消息
data=conn.recv(1024) #最大接收的字节数
print('来自客户端的数据',data)
conn.send(data.upper())

# import time
# time.sleep(500)
#六、挂掉电话链接
conn.close()

#七、关机
phone.close()

客户端:客户端至关于找电话亭给他人打电话过程input

import socket

#一、找电话亭
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print(phone)
#二、拨电话
phone.connect(('127.0.0.1',8080)) # 指定服务端ip和端口

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

# import time
# time.sleep(500)
#四、挂机
phone.close()

为服务端与客户端加上链接循环与通讯循环io

服务端:

import socket

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

#二、插入/绑定手机卡
# phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 防止地址仍被占用时报错
phone.bind(('127.0.0.1',8080))

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

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

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

客户端

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

#三、通讯:发\收消息
while True: # 通讯循环
    msg=input('>>: ').strip() #msg=''
    if len(msg) == 0:continue
    phone.send(msg.encode('utf-8'))
    # print('has send----->')
    data=phone.recv(1024)
    # print('has recv----->')
    print(data)
相关文章
相关标签/搜索