Android
クライアントからサーバーであるpython
に文字列を送信したいとします。しかし、このエラーが見つかりました。親切に私を導く!Pythonエラー:ソケットがPythonで接続されていないため、データの送受信ができませんでした
A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied
クライアント
import android.util.Log;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
public class client {
private String serverIpAddress = "172.**.*.***";
private boolean connected = false;
private int serverPort = 65534;
protected void connect() {
if (!connected) {
if (!serverIpAddress.equals("")) {
Thread cThread = new Thread(new ClientThread());
cThread.start();
}
}
}
public class ClientThread implements Runnable {
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
System.out.println("server addr " +serverAddr);
Log.d("ClientActivity", "C: Connecting...");
Socket socket = new Socket(serverIpAddress,serverPort);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String sendMessage = 2 + "\n";
out.write(sendMessage);
out.flush();
System.out.println("Message sent to the server : "+sendMessage);
socket.close();
Log.d("ClientActivity", "C: Closed.");
} catch (Exception e) {
Log.e("ClientActivity", "C: Error", e);
connected = false;
}
}
}
}
サーバー
import socket
import threading
import json
class ThreadedServer(object):
def __init__(self, host, port):
self.host = host
self.port = port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind((self.host, self.port))
print("Listening.....")
def listen(self):
self.sock.listen(5)
while True:
client, address = self.sock.accept()
print("Accepted from :: "+str(address))
data = self.sock.recv(1024)
print ("received data:", str(data))
if __name__ == "__main__":
ThreadedServer('172.**.*.***',65534).listen()
私はこだわっています!
EDIT1クレジット:j4ck
import socket
import threading
import socketserver
class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
data = str(self.request.recv(1024), 'ascii')
cur_thread = threading.current_thread()
response = bytes("{}: {}".format(cur_thread.name, data), 'ascii')
self.request.sendall(response)
class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
if __name__ == "__main__":
HOST, PORT = "localhost", 0
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
server_thread = threading.Thread(target=server.serve_forever)
server_thread.daemon = True
server_thread.start()
print("Server loop running in thread:", server_thread.name)
サーバーがシャットダウンしようとしています。すべてのリクエストに対してこのサーバーを生き生きとさせるには? Android
からソケットを使用してリクエストを送信したいと思います。私は、一度要求がサーバーに来ると、サーバーは関数のクラスではなくスレッドのスレッドを作成する必要があります。
チェック以下の実装が問題を解決する場合に役立ちます。そうでなければ、Java側の問題である可能性が高いので、あなたの質問に 'java'タグを追加してください。 – nlsdfnbch