草庐IT

Java HTTP/2 服务器套接字

我想让服务器套接字在Java中用于HTTP/2,最好是TLS/https。我有一个工作正常的TLS服务器套接字,但浏览器只能与它通信HTTP/1.1。如果我理解正确,你需要ALPN来让HTTP/2浏览器连接到你的TLS套接字并开始在其上运行HTTP/2;浏览器不会要求在https上升级到HTTP/2。到目前为止,Java8似乎还没有做ALPN。也许还有其他方法可以强制浏览器执行HTTP/2,至​​少是非TLS。那么,有人知道如何为HTTP/2制作Java服务器套接字吗? 最佳答案 Java至少要到JDK9才能获得ALPN,JDK9定

java - 如何让套接字仅接受来自本地主机的连接(在 Java 中)?

我有一个java应用程序(不在任何应用程序容器中运行),它在ServerSocket上监听连接。我希望它只接受来自本地主机的连接。目前,在接受连接后,它会检查对等IP,如果不是环回地址则拒绝它,但我知道对等IP地址可以被欺骗。所以,如果可能的话,我宁愿绑定(bind)到一个只监听环回接口(interface)的套接字;这可能吗?我尝试了一些不同的方法(例如在调用bind()时将“127.0.0.1”指定为本地地址)但没有成功。更新:我很尴尬地承认这都是我的错误。我们的应用程序监听两个不同的端口,我将一个绑定(bind)到环回接口(interface),但对另一个进行测试。当我实际尝试远

java - 测试远程端口是否被占用

我需要发现远程服务器上的开放端口。我想知道这是否可能。我在想我会打开一个套接字,如果成功,就意味着它被使用了……否则,如果我得到一个异常,那么它就不会被使用。例如,publicbooleanisActive(){Sockets=null;try{s=newSocket();s.setReuseAddress(true);SocketAddresssa=newInetSocketAddress(this.host,this.port);s.connect(sa,3000);returntrue;}catch(IOExceptione){e.printStackTrace();}final

java - 问题 starttls 后将 Java 套接字升级为加密

我希望我的应用程序在发出STARTTLS之前不加密地与服务器通信,然后升级套接字以在之后加密。我可以连接到端口(例如5222)并使用STARTTLS来使用Java请求TLS吗?如果是这样,我应该使用哪个Socket对象? 最佳答案 当然可以。使用您的SSLSocketFactory创建一个套接字包装现有的常规java.net.Socket:SSLSocketsslsocket=(SSLSocket)sslsocketfactory.createSocket(socket,socket.getInetAddress().getHost

java - 如何确定传入连接来自本地计算机

我有一个接受传入连接的SocketServer。出于安全原因,我应该只允许本地连接(来自运行服务器的机器的连接)。如何确定传入连接是否来自另一台机器?以下代码对此安全吗?Socketsocket=someServerSocket.accept();StringremoteAddress=socket.getInetAddress().getHostAddress();if(!fromThisMachine(remoteAddress)){//Notfromthismachine.}而fromThisMachine()方法是这样的:publicbooleanfromThisMachine

java - 如何在 Java 中通过套接字发送文件列表

这个问题在这里已经有了答案:Javamultiplefiletransferoversocket(3个答案)关闭7年前。我已经使用了代码here通过套接字发送单个文件。但是,我需要能够通过套接字发送多个文件(基本上是目录中的所有文件),并让客户端识别文件之间的分离方式。坦率地说,我完全不知道该怎么做。任何提示都会有所帮助。注意1:我需要一种方法来以一个连续的流发送文件,客户端可以将这些文件分离成单独的文件。它不能依赖于客户端的个别请求。注意2:要回答一个问题,我很确定我会在评论中看到,不,这不是作业。编辑有人建议我可以在文件本身之前发送文件的大小。我该怎么做,因为通过套接字发送文件总是

java - 安全套接字连接

我正在处理一个学校项目,其中包含一个保存集中数据的服务器应用程序,以及保存将与套接字同步的缓存数据的客户端应用程序。一切都是用Java编写的。什么是好的做法?我怎样才能阻止人们听我的流量?或者阻止人们理解所说的内容? 最佳答案 您只需使用SSLSocketFactory而不是您的客户端服务器应用程序的SocketFactory。这样,两者之间的通信将完全加密。如果您了解基本的Java,您可以在不到一天的时间内保护您的客户端服务器应用程序。这是一个tutorial. 关于java-安全套接

java - 有没有办法在套接字 channel 上注销选择器

这是一个非常直截了当的问题,但我发现需要注销一个忽略我的java套接字channel的选择器。SocketChannelclient=myServer.accept();//forksoffanotherclientsocketclient.configureBlocking(false);//thischanneltakesinmultiplerequestclient.register(mySelector,SelectionKey.OP_READ|SelectionKey.OP_WRITE);//changedfromrtorw稍后我可以在程序中调用类似的东西client.der

c# - 我可以仅使用套接字在 Java 和 C# 之间进行通信吗?

更具体地说,如果计算机有服务器(java.net.ServerSocket实例),我可以使用C#System.Net.Sockets.Socket连接到它吗实例? 最佳答案 主要问题是您需要非常小心地处理您发送和接收的数据的编码。这是一对协同工作的程序。C#客户端发送一个字符串,首先发送它的整数长度,然后发送字符串本身的字节。Java服务器读取长度,然后读取消息并将输出打印到控制台。然后组成回显消息,计算其长度,提取字节并将其发送回C#客户端。客户端读取长度、消息并打印输出。应该有一种方法可以避免所有按位的东西,但老实说我对这些东西

java - 在程序终止的情况下如何关闭端口?

我在我的一个Java应用程序中使用Socket通信。据我所知,如果程序遇到任何异常终止,监听端口不会关闭并且程序无法重新启动,因为它报告“端口已打开..”我有办法处理这个问题吗?一般处理这个问题的方式是什么? 最佳答案 听起来您的程序正在监听套接字。通常,当您的程序退出时,操作系统会关闭所有可能打开的套接字(包括监听套接字)。但是,对于监听套接字,操作系统通常会在程序退出后将端口保留一段时间(几分钟),以便它可以处理任何未完成的连接尝试。您可能会注意到,如果您异常关闭程序,稍后再回来,它会正常启动。如果你想避免这个延迟时间,你可以使