首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从mac向raspberry pi无线发送字符串

从mac向raspberry pi无线发送字符串
EN

Stack Overflow用户
提问于 2018-09-05 23:59:11
回答 1查看 296关注 0票数 0

我正在使用mac尝试使用蓝牙和python将字符串无线发送到覆盆子pi。然而,我找不到一个可以在mac上工作的API。我尝试过pybluez和lightblue等选项,但它们似乎不适用于mac。有没有解决这个问题的办法?蓝牙通信会更好,但我对其他建议持开放态度。提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-06 00:52:08

已更新答案

仍然使用netcat方法,如下所示,但这是用Python语言实现的发送器,改编自this answer,并与下面的接收器一起工作:

代码语言:javascript
复制
#!/usr/local/bin/python3
import socket

def netcat(host, port, content):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, int(port)))
    s.sendall(content.encode())
    s.shutdown(socket.SHUT_WR)
    while True:
        data = s.recv(4096)
        if not data:
            break
        print(repr(data))
    s.close()

netcat('192.168.0.131', 40000, 'Hi')

下面是一个匹配的监听器/服务器,它与上面的发送器或命令行中的简单netcat发送器一起使用,实现了here

代码语言:javascript
复制
#!/usr/bin/env python

import socket
import select

class SocketServer:
    """ Simple socket server that listens to one single client. """

    def __init__(self, host = '0.0.0.0', port = 2010):
        """ Initialize the server with a host and port to listen to. """
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.host = host
        self.port = port
        self.sock.bind((host, port))
        self.sock.listen(1)

    def close(self):
        """ Close the server socket. """
        print('Closing server socket (host {}, port {})'.format(self.host, self.port))
        if self.sock:
            self.sock.close()
            self.sock = None

    def run_server(self):
        """ Accept and handle an incoming connection. """
        print('Starting socket server (host {}, port {})'.format(self.host, self.port))

        client_sock, client_addr = self.sock.accept()

        print('Client {} connected'.format(client_addr))

        stop = False
        while not stop:
            if client_sock:
                # Check if the client is still connected and if data is available:
                try:
                    rdy_read, rdy_write, sock_err = select.select([client_sock,], [], [])
                except select.error:
                    print('Select() failed on socket with {}'.format(client_addr))
                    return 1

                if len(rdy_read) > 0:
                    read_data = client_sock.recv(255)
                    # Check if socket has been closed
                    if len(read_data) == 0:
                        print('{} closed the socket.'.format(client_addr))
                        stop = True
                    else:
                        print('>>> Received: {}'.format(read_data.rstrip()))
                        if read_data.rstrip() == 'quit':
                            stop = True
                        else:
                            client_sock.send(read_data)
            else:
                print("No client is connected, SocketServer can't receive data")
                stop = True

        # Close socket
        print('Closing connection with {}'.format(client_addr))
        client_sock.close()
        return 0

def main():
    server = SocketServer(port=40000)
    server.run_server()
    print('Exiting')

if __name__ == "__main__":
    main()

原始答案

尝试使用netcatnc

在RaspberryPi上,使用TCP侦听端口40,000:

代码语言:javascript
复制
nc -l 40000

在Mac上,假设RaspberryPi的IP地址为192.168.0.131:

代码语言:javascript
复制
echo "hi" | /usr/bin/nc 192.168.0.131 40000 

RaspberryPi显示:

代码语言:javascript
复制
hi
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52189307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档