# 由于不同机器上的程序要通信,才产生了网络
# server
# client
# 端口 找到的程序
# 在计算机上,每一个需要网络通信的程序,都会开一个端口
# 在同一时间只会有一个程序占用一个端口
# 不可能在同一时间有两个程序占用同一端口
# 端口范围:0-65535
# 8000之后的端口
# ip---确定唯一一台机器
# 端口——确定唯一的一个程序
# ip+端口 找到唯一的一台机器上的唯一的一个程序
# tcp协议和udp协议
# 套接字(socket)初使用
# Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,
# 它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议
#server端 import socket sk = socket.socket() #买手机 # sk.bind(('ip','port')) #绑定手机卡 sk.bind(('127.0.0.1',8080)) #绑定手机卡 sk.listen() #监听等着有人给我打电话 conn,addr = sk.accept() #接受到别人的电话 connection 连接 address地址 ret = conn.recv(1024) #听别人说话 print(ret) conn.send(b'hihihihi') #我和别人说话 conn.close() #挂电话 sk.close() #关机
# 客户端 import socket sk = socket.socket() #买手机 sk.connect(('127.0.0.1',8080)) #拨别人的号码 sk.send(b'hellohello') ret = sk.recv(1024) print(ret) sk.close()
对话模式
#server import socket sk = socket.socket() #买手机 # sk.bind(('ip','port')) #绑定手机卡 sk.bind(('127.0.0.1',8080)) #绑定手机卡 sk.listen() #监听等着有人给我打电话 conn,addr = sk.accept() #接受到别人的电话 connection 连接 address地址 print(addr) while True: ret = conn.recv(1024).decode('utf-8') if ret == 'bye': break print(ret) info = input('>>>>>>>>') conn.send(bytes(info,encoding='utf-8'))
client
import socket from socket import SOL_SOCKET,SO_REUSEADDR sk = socket.socket() #买手机 sk.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #就是它,在bind前加,避免服务重启的时候报address alre in use sk.connect(('127.0.0.1',8080)) #拨别人的号码 while True: info = input('>>>>>>') sk.send(bytes(info,encoding='utf-8')) ret = sk.recv(1024).decode('utf-8') print(ret) if ret == 'bye': sk.send(b'bye')