Я рекомендую вам следующие вещи:
Используйте SocketIO для подключения из Python к Java. Смотри здесь
Вы также можете создать HTTP (S) сервер с Flask и подключиться к вашему Java серверу> здесь
Использование сырых сокетов никогда не было хорошей идеей для работы, я предпочитаю Netty для приложений Java и Spring для служб RESTful.
Кроме того, ваш код выполняется в главном потоке, и сервер Python прерывает себя, если клиент отключается.
НЕ используйте этот Код в Производстве! Это небезопасно!
Вы также можете построить это на Java:
public class NetworkServer {
public void run(String address, int port) throws InterruptedException {
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.childHandler(new PipelineInjector())
.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 100)
.option(ChannelOption.SO_RCVBUF, 4096)
.option(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(4096));
ChannelFuture f = b.bind(address, port).sync();
System.out.println("Network server succesfully bound to :" + address + ":" + port);
try {
f.channel().closeFuture().sync();
} catch (Exception e) {
System.out.println("Couldn't bind server to :" + address + ":" + port);
System.exit(1);
}
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
И клиент:
public class NetworkClient {
public void run(String address, int port) throws InterruptedException {
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
try {
Bootstrap b = new Bootstrap();
b.childHandler(new PipelineInjector())
.group(bossGroup, workerGroup)
.channel(NioSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 100)
.option(ChannelOption.SO_RCVBUF, 4096)
.option(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(4096));
ChannelFuture f = b.connect(address, port).sync();
try {
f.channel().closeFuture().sync();
} catch (Exception e) {
System.exit(1);
}
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
} }
В этом примере показан клиент Netty и сервер Netty. Нетти довольно полезна и работает довольно хорошо. Нетти может быть немного сложнее, но работает отлично.
Для безопасного использования Netty необходимо зашифровать все сообщения с помощью TLS / SSL .
Кроме того, вы должны добавить очередь сообщений в очередь сообщений, которые не могли быть отправлены.
Есть много способов создания сетей, возможно, вы удовлетворены одним из этих методов.