程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python Socket 在同一个树莓上发送和接收不起作用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Python Socket 在同一个树莓上发送和接收不起作用?

开发过程中遇到Python Socket 在同一个树莓上发送和接收不起作用的问题如何解决?下面主要结合日常开发的经验,给出你关于Python Socket 在同一个树莓上发送和接收不起作用的解决方法建议,希望对你解决Python Socket 在同一个树莓上发送和接收不起作用有所启发或帮助;

做了一个从仪器接收数据的小程序。它在 windows 上运行良好,但我需要在 RaspBerry Pi 上运行它,但它不起作用。 这是服务器的代码:

`from socket import socket,gethostbyname,AF_INET,SOCK_DGRAM
import pymysql.cursors


PORT_numbER = 57806
SIZE = 1024

hostname = gethostbyname( '' )

mySocket = socket( AF_INET,SOCK_DGRAM )
mySocket.bind( (hostname,PORT_numbER) )

print ("Test server Listening on port {0}\n".format(PORT_numbER))

while True:

        (data,addr) = mySocket.recvfrom(SIZE)
        print("aa")
        data= data.decode("utf-8")
        data = data.split("      ",2)[-1]
        data = data.partition(',')
        print (data[0])
        print(addr)
        connection = pymysql.connect(host='localhost',user='mezzo_mobile',password='',database='mezzo_mobile',charset='utf8mb4',cursorclass=pymysql.cursors.Dictcursor)
        with connection:
                with connection.cursor() as cursor:

                            # Create a new record
                        sql = "INSERT INTO misure (mac,strumento,dato) VALUES (%s,%s,%s)"
                        if  str(addr[0])== "192.168.1.99":
                                cursor.execute(sql,("00-05-2B-08-44-EB","NOX",str(data[0])))
                                connection.commit()`

这里是客户端的代码:

` import sys
from socket import socket,SOCK_DGRAM

SERVER_IP   = '192.168.1.99'
PORT_numbER = 53700
SIZE = 1024

mySocket = socket( AF_INET,SOCK_DGRAM )
mySocket.bind(('192.168.1.100',57806))

while True:
        data = bytes.fromhex('014630303430335230303102313103')
        mySocket.sendto(data,(SERVER_IP,PORT_numbER))
        exit()  `

这个仪器是这样工作的:我发送一个包含这个数据“014630303430335230303102313103”的数据包,它把测量值发回给我。正如我所说,它在 windows 上运行良好,但我在 RaspBerry 上需要它。 在RaspBerry上,如果我先运行服务器然后运行客户端,则客户端会抛出错误:

OSerror: [Errno 98] Address already in use

我不知道该怎么做,我也不太了解python,有什么建议吗?

解决方法

我搜索了一些 Python 上的套接字是如何工作的,发现我可以在同一个脚本中完成所有操作。这就是代码现在的样子:

import sys
from socket import socket,AF_INET,SOCK_DGRAM

SERVER_IP   = '192.168.1.99'
PORT_numbER = 53700
SIZE = 1024

mySocket = socket( AF_INET,SOCK_DGRAM )
mySocket.bind(('192.168.1.100',57806))

while True:
        data = bytes.fromhex('014630303430335230303102313103')
        mySocket.sendto(data,(SERVER_IP,PORT_numbER))
        (data,addr) = mySocket.recvfrom(SIZE)
        print(data)
        exit()  

现在它按预期工作

大佬总结

以上是大佬教程为你收集整理的Python Socket 在同一个树莓上发送和接收不起作用全部内容,希望文章能够帮你解决Python Socket 在同一个树莓上发送和接收不起作用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:Python