我想发送一个字符串从Android
客户端到python
即服务器。但是我发现了这个错误。请引导我!
不允许发送或接收数据的请求,因为套接字未连接,并且(使用sendto调用在数据报套接字上发送时)未提供地址
客户端
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()
我被卡住了!
编辑1学分: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
发送请求。我想,一旦请求到达服务器,服务器应该使类的线程而不是函数。
首先,您正在导入线程
模块,但似乎根本没有使用它。
我建议您使用socketserver
模块,因为它更方便,可以为您做一些事情。
线程版本将使用一个mixin
,如下所示(来自上面链接的python文档):
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
# This is a dummy client to show the functionality and is not required, should you choose to implement it
def client(ip, port, message):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect((ip, port))
sock.sendall(bytes(message, 'ascii'))
response = str(sock.recv(1024), 'ascii')
print("Received: {}".format(response))
if __name__ == "__main__":
# Port 0 means to select an arbitrary unused port
HOST, PORT = "localhost", 0
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
# Start a thread with the server -- that thread will then start one
# more thread for each request
server_thread = threading.Thread(target=server.serve_forever)
# Exit the server thread when the main thread terminates
server_thread.daemon = True
server_thread.start()
print("Server loop running in thread:", server_thread.name)
client(ip, port, "Hello World 1")
client(ip, port, "Hello World 2")
client(ip, port, "Hello World 3")
server.shutdown()
server.server_close()
我正在Pygame中创建一个游戏,它需要多人游戏的客户端服务器部分。 首先,我正在检查是否有少于两个连接。如果是这种情况,客户端将显示一个屏幕,上面写着“等待连接”。 我已使客户端成功地向服务器发送“1”消息,如果服务器未满,服务器将以“1”响应。因此,如果服务器没有响应1,则服务器已满,客户端可以继续。 然而,我在标题中提到了这个错误。 服务器代码: 调用它的客户端代码: 服务器代码中的s.se
我正在尝试使用WCF代码中的TCP套接字连接到远程外部服务器我的WCF服务是一个客户端,它的代码使用套接字连接到外部服务器。此代码向外部服务器发送请求并接收服务器响应 如果我使用相同的客户端代码创建一个windows应用程序以连接到远程服务器,则成功。我能够连接、发送和接收此错误仅在我将WCF带入图片时发生。代码在if(m_socket失败。连接)。因此无法成功连接。 非常感谢。
我正在尝试使用套接字库在python中创建一个控制台聊天应用程序。 每当我向服务器发送消息时,服务器代码就会崩溃,并显示以下消息: OSError:[WinError 10057]不允许发送或接收数据的请求,因为套接字未连接,并且(使用sendto调用在数据报套接字上发送时)未提供地址 服务器代码 客户端代码 我试图实现的是,每当我向服务器发送消息时,客户端脚本都应该打印发送的消息。我该怎么解决这
完整错误代码: 我创建了SSL套接字服务器和客户端,但然后服务器尝试从客户端接收信息,它失败了,打印错误,这是上面的文本。 服务器: 客户:
因此,我试图发送一个数据包,但我不断得到这个错误 任何帮助将是真棒! 谢谢! 错误消息:不允许发送或接收数据的请求,因为套接字未连接,并且(使用sendto调用在数据报套接字上发送时)未提供地址 代码: }
我试图将文件从客户端传输到服务器。但由于错误,我没有收到任何文件。 这是我的server.py文件,但我得到这个错误,当我要从客户端接收文件。 这是我的客户。请看下面。但这并没有出现错误。 这是我的服务器错误。派克