首页 > 解决方案 > 套接字不能在不同设备上的同一网络上工作

问题描述

当我尝试在 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;
}

标签: pythonsocketsnetworkingdartnetwork-programming

解决方案


推荐阅读