什么是 Socket?
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
上代码:
首先是服务器端整体结构:
# tcps = socket() #创建服务器套接字
# tcps.bind() #把地址绑定到套接字
# tcps.listen() #监听链接
# while True: #服务器无限循环
# tcpc = tcps.accept() #接受客户端链接
# while True: #通讯循环
# tcpc.recv()/tcpc.send() #对话(接收与发送)
# tcpc.close() #关闭客户端套接字
# tcps.close() #关闭服务器套接字(可选)
服务器端实例:
import socket
import time
import sys
#获取本机电脑名
myname = socket.gethostname()
#获取本机ip
myPC_IP = socket.gethostbyname(myname)
COD = 'utf-8'
# 需要内网IP
HOST = myPC_IP # 主机ip
# 服务器防火墙需要打开这个端口,允许访问
PORT = 21566 # 软件端口号
BUFSIZ = 1024
ADDR = (HOST, PORT)
SIZE = 50
tcpS = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建socket对象
tcpS.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1) #加入socket配置,重用ip和端口
tcpS.bind(ADDR) # 绑定ip端口号
tcpS.listen(SIZE) # 设置最大链接数
while True:
print("服务器启动,监听客户端链接")
clientsocket, addr = tcpS.accept()
print("链接的客户端", addr)
while True:
try:
data = clientsocket.recv(BUFSIZ) # 读取已链接客户的发送的消息
except Exception:
print("断开的客户端", addr)
break
print("客户端发送的内容:",data.decode(COD))
if not data:
break
msg = time.strftime("%Y-%m-%d %X") #获取结构化事件戳
msg1 = '[%s]:%s' % (msg, data.decode(COD))
clientsocket.send(msg1.encode(COD)) #发送消息给已链接客户端
clientsocket.close() #关闭客户端链接
tcpS.close()
本地PC端结构:
# tcpc = socket() # 创建客户端套接字
# tcpc.connect() # 尝试连接服务器
# while True: # 通讯循环
# tcpc.send()/tcpc.recv() # 对话(发送/接收)
# tcpc.close() # 关闭客户套接字
PC端实例:
import socket
from time import ctime
# 访问公网IP,这里填写你服务器的公网IP
HOST = '***.***.***.***' #服务端ip
# 云服务器上这个端口需要开启
PORT = 21566 #服务端端口号(注意,这个端口在服务器一定要开启,防火墙也要正常开启运行!!!)
BUFSIZ = 1024
ADDR = (HOST, PORT)
tcpCliSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建socket对象
tcpCliSock.connect(ADDR) #连接服务器
while True:
data = input('>>').strip()
if not data:
break
tcpCliSock.send(data.encode('utf-8')) #发送消息
data = tcpCliSock.recv(BUFSIZ) #读取消息
if not data:
break
print(data.decode('utf-8'))
tcpCliSock.close() #关闭客户端
END...