感谢所有帮助我的人。我已经编辑了我的问题,知道我在关闭Java端的套接字时出错,并且客户端从2中发送了一个数据。如果我需要提出一个新问题,请很好地告诉我。
我正在尝试制作一个使他能够将数据发送到服务器的应用程序,原因是我认为printwriter
没有发送数据。在检查不是阻止该服务器之前,我编写了一个使用公共IP连接并发送的Python代码。这是我的代码。
# coding: utf-8
import socket
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while True:
socket.connect(("86.253.74.230", 1555))
user_tab=input("what do you whant to send?")
data=(str(user_tab))
print(data)
data = data.encode("utf-8")
socket.sendall(data)
print("send all")
socket.close()
host, port =('', 1234)
socket.close()
此代码可以正常工作,因此现在我知道它不会发送the java code
,但我尊重在网上找到的刷新the online doc的文档。确实,他的奇怪之处在于它可以在模拟器上运行,但不能在真实设备上运行。有人可以帮我吗,我发现这个错误很奇怪,因为它可以在模拟器,Python和专用IP上运行。在发送数据后,可能需要强制关闭套接字。
java代码
Thread client = new Thread() {
public void run() {
try {
sock = new Socket( "83.201.34.230", 1555);
PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(sock.getOutputStream()));
printWriter.write("hello\r\n");
printWriter.close();
printWriter.flush();
try{
sock.shutdownOutput();
sock.close();
}catch (Exception e){
System.out.println( e );
}
System.out.println( sock.isBound());
System.out.println("socket open");
} catch (IOException e) {
e.printStackTrace();
}
}
};
client.start();
python serveur
# coding: utf-8
import socket
import threading
import time
class ClientThread(threading.Thread):
def __init__(self, ip, port, clientsocket, tcpsock):
threading.Thread.__init__(self)
self.tcpsock=tcpsock
self.ip = ip
self.port = port
self.clientsocket = clientsocket
print("[+] Nouveau thread pour %s %s" % (self.ip, self.port, ))
def run(self):
print("Connexion de %s %s" % (self.ip, self.port, ))
print("staart fonction recv")
r = self.clientsocket.recv(2048)
print("Ouverture du fichier: ", r, "...")
fp =("hello, i'm the serveur the code worked")
self.clientsocket.send(fp)
self.clientsocket.close()
self.tcpsock.close()
print("Client déconnecté...")
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpsock.bind(("",1555))
tcpsock.listen(10)
print( "En écoute...")
(clientsocket, (ip, port)) = tcpsock.accept()
newthread = ClientThread(ip, port, clientsocket, tcpsock)
newthread.start()
time.sleep(4)
print("close socket")
tcpsock.close()
我不认为它是阻止数据的防火墙,因为它可以与我之前向您展示的python中的第一个代码配合使用。 我确定我不是唯一需要制作一个能够连接到服务器的应用程序的人吗?如果套接字不是他用来执行我正在做的事情的模块,请告诉我
结论 我的rooter强迫我关闭servur,但是当我关闭客户端的输出和套接字的所有内容时,servur仍在等待,因此我们可以认为socket仍处于打开状态,但函数sock.Isclose()表示不是案件。为什么当客户关闭时伺服器不会关闭。伺服关闭时,它可能会接收到一些东西。这是我做python客户端时要附加的内容。
感谢所有帮助我了解此代码的人,当我每次尝试关闭并重新加载应用后,他可以发送2次超时1次。 我有一个错误,说 I / System.out:java.net.SocketException:关闭失败:EBADF(错误的文件号) 是
socket open
如果有人可以告诉我如何关闭客户,那将很高兴。但知道我不明白为什么不正确关闭套接字我仍然可以发送数据。甚至为什么当我关闭应用程序以关闭端口时代码也不每次都发送数据?
感谢您的全方位帮助