感谢那些曾经帮助过我的人,但我仍然有一个问题。当我使用python客户机发送数据时,与java客户机相比,使用python客户机,serveur在套接字关闭之前不会接收数据,当客户机与公共ip连接,serveur使用rasberry pi时,就是这种情况。那么为什么serveur在我关闭客户端的套接字之后使用java代码serveur仍然在等待一些数据而不是关闭线程并停止等待数据呢?
与公共ip连接的java代码
sock = new Socket( "83.201.34.230", 1555);
PrintWriter printWriter = new PrintWriter(new PrintStream(sock.getOutputStream()));
String str = "This is a test String";
// converting to byte[]
try {
//sprintWriter.write( 1234 );
printWriter.write( "hello\r\n\b" );
printWriter.flush();
printWriter.close();
System.out.println(printWriter.checkError());
System.out.println( "catch error PR1234" );
}catch (Exception e){
System.out.println( e );
System.out.println( "catch error 1234" );
}
System.out.println( sock.isConnected());
System.out.println("socket open");
} catch (IOException e) {
e.printStackTrace();
}
}
```
python服务器
# 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, "...")
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客户端
# coding: utf-8
import socket
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect(("91.58.70.106", 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()
有人能告诉我一个类似python shutdown的函数,使客户机能够像python中通常那样关闭serveur吗。你知道吗
结论
总之,我认为当两种语言不同时,即使使用tcp和udp,当我使用语言标识时,当客户端关闭时,他也不会自动关闭serveur。因此,如果python函数关闭时有一个java函数标识,它可能会关闭边界上的套接字。或者一种让我的rasberry pi像我的windows笔记本电脑那样的方式,它不会让插座关闭来接收数据。你知道吗
谢谢你的帮助
如果我还不清楚,这就是python客户机和java客户机之间的区别
有了python客户端,一切正常,我可以在关闭后接收数据
[+] newthread pour 90.57.70.108 50576
Connexion de 90.57.69.108 50576
En listenning...
start fonction receive
('Ouverture du fichier: ', 'hello', '...')
Client Disconnected...
使用java客户机,我无法在关闭后接收数据
[+] New thread pour 90.57.69.108 50751
Connexion de 90.57.69.108 50751
start fonction receive
即使我阅读了这个文档https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html,我也没有发现插座关闭()在python中
我认为serveur看不到客户机套接字何时关闭或者客户机套接字何时未正确关闭,因为在python客户机上发送数据后,当我没有关闭时,它会附加什么
如果有人做了一个应用程序,他能够连接到一个服务器,我不认为我是唯一一个需要这样做,你可以请分享你使用了什么功能,或者如果你使用UDP或tcp,你的经验,我会很高兴知道。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐