python - 套接字不能在不同设备上的同一网络上工作
问题描述
当我尝试在 PC 上的 android emu 上运行客户端时,我托管了我的套接字服务器。连接确实有效,但是当我尝试在实际设备上运行客户端应用程序时,它既不连接也不抛出任何错误。我尝试禁用防火墙,但也没有用。
这是我在 python 中的服务器套接字代码:
import socket
import json
from test import testdef
HEADERSIZE = 10
SERVER = "0.0.0.0" # socket.gethostbyname(socket.gethostname())
PORT = 5050
ADDR = (SERVER, PORT)
FORMAT = 'utf-8'
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(ADDR)
s.listen(5)
print(f"[ACTIVE] Hosted on {SERVER}")
print(f"[CONNECT TO] {socket.gethostbyname(socket.gethostname())}")
while True:
client_socket, address = s.accept()
print(f"[CONNECTED] {address}")
header = b''
while len(header) < HEADERSIZE:
chunk = client_socket.recv(HEADERSIZE - len(header))
if chunk == b'':
break
header += chunk
if len(header) < HEADERSIZE:
print("Client disconnected without sending full header")
continue
payload_len = int(header)
payload = b''
while len(payload) < payload_len:
chunk = client_socket.recv(payload_len - len(payload))
if chunk == b'':
break
payload += chunk
if len(payload) < payload_len:
print("Client disconnected without sending full payload")
continue
payload = payload.decode(FORMAT)
print(f"[REQUEST] {payload}")
request = json.loads(payload)
if request["command"] == "test":
testdef(request["username"], request["password"])
send_message = {'status': 'RECEIVED'}
final_send_message = json.dumps(send_message)
client_socket.send(bytes(final_send_message, FORMAT))
if request["command"] == "createAccount":
send_message = {'status': 'RECEIVED'}
final_send_message = json.dumps(send_message)
client_socket.send(bytes(final_send_message, FORMAT))
这是我的飞镖客户端代码:
import 'dart:io';
import 'dart:convert';
import 'dart:async';
Map _response;
Future<Map> request(Map requestJson) async {
Socket _socket;
await Socket.connect("192.168.56.1", 5050).then((Socket sock) {
_socket = sock;
}).then((_) {
final _payload = jsonEncode(requestJson);
int _header = 8;
int _msgLength = _payload.length;
final _finalMessage = _msgLength.toString() + (" " * _header) + _payload;
_socket.write(_finalMessage);
return _socket.first;
}).then((data) {
_response = jsonDecode(utf8.decode(data));
});
return _response;
}
解决方案
推荐阅读
- oracle - 我正在尝试组合 3 个表以获得不同的组合,如下所示
- python - 在 Django 视图中多次返回并继续执行代码
- angular - 使用量角器进行 E2E 测试:“失败:关闭的用户提示对话框”
- .net - 'ApplicationDbContext' 不继承自 DbContext
- python - Python 程序将 self 计为参数,并且 a 导致 TypeError
- python - 如何在 django 模型中计算@property 函数的总和?
- flutter - 修改后的骰子程序在颤振中无法按预期工作
- selenium - 在 Jmeter 中使用 Selenium 在网页中查找元素
- react-native - onPress 在 React Native Flatlist 中不起作用
- css - 尽管设置了宽度和高度,但图像在加载后导致回流?