我有两个关于 java 套接字编程的问题。这将是独立的应用程序,并且仅在 J2SE 中构建。
1) 在我的例子中,是否可以通过同一端口同时读/写,因为它将是一个 https 请求,所以端口将为 443。
2) 是否可以在一个 java 应用程序中创建两个套接字连接。其中一个套接字充当客户端,另一个充当服务器。
我一直在寻找与此相关的一些资料,但我找不到任何有用的东西。
最佳答案
套接字连接是双向的,因此您可以在一个连接上读取和写入。它类似于将电线插头连接到 socket 中,因此得名 socket 。
这是你的做法
Socket socket = new Socket("10.0.0.1", 1234);
OutputStream os = socket.getOutputStream();
InputStream is socket.getInputStream();
new MyInputServiceThread(is).start();
现在您可以从操作系统写入并从操作系统读取。如果您希望它们不同步,您可以在同一线程或不同线程上执行此操作。
在 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 和其他应用程序服务器已经这样做了。如果这将是一个网络应用程序,您还需要考虑一个正确签名的数字证书。如果是它的内联网,那么用于访问它的浏览器将必须导入一个自生成的自签名证书。
关于Java套接字编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8583818/