Python3--本地通过Socket与服务器(TCP)通信简单实例:

什么是 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...

猜你喜欢

转载自blog.csdn.net/HHH_LLL/article/details/101573431