【发布时间】:2018-01-06 23:33:56
【问题描述】:
刚开始学习python socket编程。我正在尝试使用 python 套接字从 Raspberry Pi 3 发送和接收数据。我在 Raspberry Pi 上运行服务器程序,在运行 Ubuntu 的笔记本电脑上运行客户端程序。两者都在同一个WiFi网络上。程序运行,客户端连接到服务器,但没有数据传输。客户端和服务器都不做任何事情。如果我尝试在同一设备上同时运行这两个程序,它们将正常运行。这是我的代码:-
客户
import socket
HOST = '172.16.31.51'
PORT = 5000
BUFSIZ = 1024
if __name__ == '__main__':
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = input("Enter hostname [%s]: " %HOST) or HOST
port = input("Enter port [%s]: " %PORT) or PORT
sock_addr = (host, int(port))
client_sock.connect(sock_addr)
payload = 'GET TIME'
try:
while True:
client_sock.send(payload.encode('utf-8'))
data = client_sock.recv(BUFSIZ)
print(repr(data))
more = input("Want to send more data to server[y/n]:")
if more.lower() == 'y':
payload = input("Enter payload: ")
else:
break
except KeyboardInterrupt:
print("Exited by user")
client_sock.close()
服务器
import socket
from time import ctime
PORT = 5000
BUFSIZ = 1024
ADDR = ('', PORT)
if __name__ == '__main__':
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(ADDR)
server_socket.listen(5)
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1)
while True:
print('Server waiting for connection...')
client_sock, addr = server_socket.accept()
print('Client connected from: ', addr)
while True:
data = client_sock.recv(BUFSIZ)
if not data or data.decode('utf-8') == 'END':
break
print("Received from client: %s" % data.decode('utf-8'))
print("Sending the server time to client: %s" %ctime())
try:
client_sock.send(bytes(ctime(), 'utf-8'))
except KeyboardInterrupt:
print("Exited by user")
client_sock.close()
server_socket.close()
编辑:
截图 - https://imgur.com/a/NgzsC
当我在客户端按下 Ctrl + C 时,服务器似乎在与客户端断开连接之前发送了一些数据。这是它的截图 - https://imgur.com/a/hoLwN
【问题讨论】:
-
你两端的输出是什么?到目前为止,您诊断出什么?
-
这是两个设备上的输出屏幕 - imgur.com/a/NgzsC
-
当我在客户端(我的笔记本电脑)上单击 Ctrl + C 时,服务器似乎发送了一些数据,然后出现“由对等方重置连接”。我不知道为什么它只在我按 Ctrl + C 时才发送数据。这是它的屏幕截图 - imgur.com/a/hoLwN
标签: python sockets raspberry-pi