我在java socket编程中有两个问题。这将是独立的应用程序,并且仅在 J2SE 中构建。
1)在我的情况下,是否可以通过同一个端口同时读/写,因为它将是一个 https 请求,所以端口将是 443。
2) 是否可以在一个 java 应用程序中创建两个套接字连接。其中一个套接字充当客户端,另一个充当服务器。
我一直在寻找有关此的一些材料,但我找不到任何有用的东西。
我在java socket编程中有两个问题。这将是独立的应用程序,并且仅在 J2SE 中构建。
1)在我的情况下,是否可以通过同一个端口同时读/写,因为它将是一个 https 请求,所以端口将是 443。
2) 是否可以在一个 java 应用程序中创建两个套接字连接。其中一个套接字充当客户端,另一个充当服务器。
我一直在寻找有关此的一些材料,但我找不到任何有用的东西。
套接字连接有两种方式,因此您可以在一个连接上读取和写入。它类似于将电线插头连接到插座中,因此称为插座。
这是你如何做到的
Socket socket = new Socket("10.0.0.1", 1234);
OutputStream os = socket.getOutputStream();
InputStream is socket.getInputStream();
new MyInputServiceThread(is).start();
现在您可以从 os 写入并从 os 读取。如果您希望它们不同步,您可以在同一线程或不同线程上执行此操作。
在 2 上,您可以在一个应用程序中拥有任意数量的客户端和服务器套接字。至少理论上是这样。有实际限制。对于服务器套接字,您可以接受一个连接,然后在打开的套接字上生成一个线程,然后您的服务器套接字应该准备好接受更多连接。换句话说,要允许同一端口上的多个连接,您应该确保在接受连接后不会阻塞。但是,您也可以在多个线程中打开多个服务器套接字。
这是一个例子
ServerSocket server = new ServerSocket(1234);
while (true) {
Socket socket = server.accept();
// Once it spawns the thread that socket connection is serviced by
//the thread and the
//server socket is ready to accept new connections.
new Mythread(socket).start();
// above Mythread extends Thread....
}
对于作为客户端的应用程序没有限制。即尽可能多的连接。
另一方面...对于https,您还必须接受证书,这意味着您必须处理私有公钥。你真的想这样做吗?因为 tomcat 和其他应用程序服务器已经这样做了。如果这将是一个网络应用程序,您还需要考虑一个正确签名的数字证书。如果它的 Intranet 那么用于访问它的浏览器将必须导入自生成的自签名证书。
对于你的两个问题,答案都是肯定的。对于第二个问题,您需要创建一个线程来侦听服务器上的活动。
看看这个教程
创建端口的程序是服务器程序。
在服务器程序中,您可以创建多个侦听客户端请求的端口。
客户端不会创建端口,只有服务器程序会。客户端仅在该服务器端口向服务器发送请求。因此,程序中的任意数量的端口始终是服务器端口。
当客户端向服务器发送请求时,服务器会获得一个缓冲内存,请求所在的位置,服务器读取它。服务器还获得另一个缓冲存储器,服务器可以在其中写入需要发送回客户端的响应。所以,是的,服务器可以同时读写。
对于那些仍在寻找进一步解释的人。下面是一些使用 Java 套接字制作的简单游戏示例的链接。我发现有一些代码可以剖析和使用是很有帮助的。