本次Python实现不同局域网下的socket通讯是在完成前面博客内容配置的前提下的
socket的python接口函数在前面的博客中也有笔记
这个例程主要完成的功能是:
简而言之:一台机器采集数据,将数据发送给另外一台机器,另外一台机器根据收到的数据进行分析匹配,返回一个指令,从而实现智能互联的目的
service端:
"""
file:01_A_higher_com_service(can_send_cmd).py
socket service
"""
import socket
import sys
def socket_service():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 防止socket server重启后端口被占用(socket.error: [Errno 98] Address already in use)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('127.0.0.1', 22))
s.listen(10)
except socket.error as msg:
print(msg)
sys.exit(1)
print('Waiting connection...')
while True:
conn, address = s.accept()
print('Accept new connection from {0}'.format(address))
conn.send(('Hi, Welcome to the server!').encode())#encode是编码函数
while True:
data = conn.recv(1024)
print('{0} client send data is >>>{1}'.format(address,data.decode()))
if int(data.decode()) > 100:
conn.send(('---> open door!').encode())#cmd1
if int(data.decode()) <= 100:
conn.send(('---> close door!').encode())#cmd2
if data == 'exit' or not data:
break
conn.close()
if __name__ == '__main__':
socket_service()
client端:
"""
file:01_A_simple_com_client.py
socket client
"""
import socket
import sys
def socket_client():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('x.x.x.x', 6000))#这里填写的是你自己服务器的公网IP地址,6000是远程访问的端口号
except socket.error as msg:
print(msg)
sys.exit(1)
print(s.recv(1024)) # 目的在于接受:Accept new connection from (...
while 1:
data = input('Please input : ').encode()
s.send(data)
receive_cmd = s.recv(1024)
print('receive:', receive_cmd)
if data == 'exit':
break
s.close()
if __name__ == '__main__':
socket_client()