重庆自助建站系统哪家好,网络推广与推广,怎么进行网站优化,建e网效果图一、概念
两个独立python文件之间可以通过写入文件#xff0c;读取文件进行交互 由于不同机器上的程序要通信#xff0c;才产生了网络 B/S架构统一入口#xff0c;各种小程序和公众号 服务端 一直运行#xff0c;等待服务别人 客户端 用的时候#xff0c;才使用服务 想要…一、概念
两个独立python文件之间可以通过写入文件读取文件进行交互 由于不同机器上的程序要通信才产生了网络 B/S架构统一入口各种小程序和公众号 服务端 一直运行等待服务别人 客户端 用的时候才使用服务 想要实现通信 网卡 和 网线 网卡上有全球唯一的mac地址物理地址 4个点分十进制 4个八位二进制00000000.00000000.00000000.00000000 0.0.0.0-255.255.255.255 通过ip地址就能找到对应的mac地址遵循arp协议 交换机-多台机器间的通信问题广播风暴 网关局域网中的机器想要访问局域网外的机器需要通过网关访问 子网掩码与IP地址进行按位与 运算 得到网段地址可判断电脑是否在同一个网段内 端口找到的程序 在同一时间只会有一个程序占用一个端口 不可能在同一时间 有两个程序 占用同一个端口 端口范围0-65535 一般用8000之后的端口
ip确定唯一一台机器 127.0.0.1 本地的回环地址 端口确定唯一的一个程序 ip端口找到唯一的一台机器上的唯一的一个程序 二、socket初认识
server端
#server端
import socket
sksocket.socket() #sk为手机对象
# sk.bind(ip,port) #绑定手机号
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 避免服务重启的时候报address already in use
sk.bind((127.0.0.1,8080))
sk.listen() # 监听。等电话过程
conn,addrsk.accept() #接收到别人电话 connection连接与它连接的address地址
print(addr)
while True:# retconn.recv(1024) # 听别人说话# print(ret)# conn.send(bhi) # 我和别人说话必须传一个bytes类型# retconn.recv(1024)# print(ret.decode(utf-8))# conn.send(bytes(大碗油泼面,encodingutf-8))retconn.recv(1024).decode(utf-8)if retbye:breakprint(ret)infoinput()conn.send(bytes(info,encodingutf-8))
conn.close() #挂电话
sk.close() #关手机
client端
# client端
import socket
sksocket.socket() #买手机
sk.connect((127.0.0.1,8080)) #拨别人的号
while True:# sk.send(bhello)# retsk.recv()# print(ret)# sk.send(bytes(中午吃什么.encode(utf-8)))# retsk.recv(1024)# print(ret.decode(utf-8))infoinput()sk.send(bytes(info,encodingutf-8))retsk.recv(1024).decode(utf-8)print(ret)if retbye:sk.send(bbye)breaksk.close()
三、socket之udp和tcp
TCP-demo
server端
#server端
import socket
sksocket.socket() #买手机 创建一个socket对象
sk.bind((127.0.0.1,8080)) #绑定ip和端口,启动服务
sk.listen() #写几就是几个不写就是不限制conn,addrsk.accept() #获取到一个客户端的连接已经完成了三次握手# 阻塞
# msg conn.recv(1024) # 阻塞
# print(msg.decode(utf-8))
while True:infoinput()if infobye:conn.send(bbye) # 发消息breakconn.send(info.encode(utf-8)) #发消息retconn.recv(1024).decode(utf-8)if retbye:breakprint(ret)
conn.close()
sk.close() #关闭socket对象如果不关闭还能继续接收client端
# client端
import socket
sksocket.socket()
sk.connect((127.0.0.1,8080))
while True:msginput()if msgbye:sk.send(bbye)breaksk.send(msg.encode(utf-8))retsk.recv(1024).decode(utf-8)if retbye:breakprint(ret)
sk.close()
UDP-demo
server端
# server端
import socket
sksocket.socket(typesocket.SOCK_DGRAM)
sk.bind((127.0.0.1,8080))msg,addrsk.recvfrom(1024)
print(msg.decode(utf-8))
sk.sendto(bbye,addr)# udp的server不需要监听和建立连接
# 而是在启动服务后只能被动的等待客户端发送消息过来
# 客户端发送消息的同时还会 自带地址信息
# 消息回复时不仅需要发送消息还需要把对方的地址发送过去client端
# client端
import socket
sksocket.socket(socket.SOCK_DGRAM)
ip_port(127.0.0.1,8080)
sk.sendto(bhello,ip_port)
ret,addrsk.recvfrom(1024)
print(ret.decode(utf-8))
sk.close()
四、利用udp实现qq聊天功能
server
import socket
sksocket.socket(typesocket.SOCK_DGRAM)
sk.bind((127.0.0.1,8080))
while True:msg,addrsk.recvfrom(1024)print(addr)print(msg.decode(utf-8))infoinput().encode(utf-8)sk.sendto(info,addr)
sk.close()
client1
import socket
sksocket.socket(typesocket.SOCK_DGRAM)
ip_port(127.0.0.1,8080)
while True:# infoinput(tiger哥).encode(utf-8)info input(tiger哥)info(\033[34m来自tiger哥的消息 %s\033[0m%info).encode(utf-8)sk.sendto(info,ip_port)msg,addrsk.recvfrom(1024)print(msg.decode(utf-8))sk.close()
client2
import socket
sksocket.socket(typesocket.SOCK_DGRAM)
ip_port(127.0.0.1,8080)
while True:# infoinput(二哥).encode(utf-8)info input(二哥)info(\033[32m来自二哥的消息 %s\033[0m%info).encode(utf-8)sk.sendto(info,ip_port)msg,addrsk.recvfrom(1024)print(msg.decode(utf-8))sk.close()
五UDP实现时间转换
server端
# 需求# 写一个时间同步的服务器# 服务端接收请求# 按照client端发送的时间格式,将服务器时间转换成对应格式# 发送给客户端
import socket
import time
sksocket.socket(typesocket.SOCK_DGRAM)
sk.bind((127.0.0.1,9000))
while True:msg,addrsk.recvfrom(1024)time_formatmsg.decode(utf-8)time_strtime.strftime(time_format)sk.sendto(time_str.encode(utf-8),addr)
sk.close()
client端
import socket
sksocket.socket(typesocket.SOCK_DGRAM)
sk.sendto(%Y-%m-%d %H-%M-%S.encode(utf-8),(127.0.0.1,9000))
msg,addrsk.recvfrom(1024)
print(msg.decode(utf-8))
sk.close()参考自https://www.cnblogs.com/Eva-J/p/5045061.html