1

我在java socket编程中有两个问题。这将是独立的应用程序,并且仅在 J2SE 中构建。

1)在我的情况下,是否可以通过同一个端口同时读/写,因为它将是一个 https 请求,所以端口将是 443。

2) 是否可以在一个 java 应用程序中创建两个套接字连接。其中一个套接字充当客户端,另一个充当服务器。

我一直在寻找有关此的一些材料,但我找不到任何有用的东西。

4

4 回答 4

4

套接字连接有两种方式,因此您可以在一个连接上读取和写入。它类似于将电线插头连接到插座中,因此称为插座。

这是你如何做到的

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 那么用于访问它的浏览器将必须导入自生成的自签名证书。

于 2011-12-21T00:48:46.570 回答
2

对于你的两个问题,答案都是肯定的。对于第二个问题,您需要创建一个线程来侦听服务器上的活动。

看看这个教程

于 2011-12-21T00:42:50.550 回答
0
  1. 创建端口的程序是服务器程序。

  2. 在服务器程序中,您可以创建多个侦听客户端请求的端口。

  3. 客户端不会创建端口,只有服务器程序会。客户端仅在该服务器端口向服务器发送请求。因此,程序中的任意数量的端口始终是服务器端口。

  4. 当客户端向服务器发送请求时,服务器会获得一个缓冲内存,请求所在的位置,服务器读取它。服务器还获得另一个缓冲存储器,服务器可以在其中写入需要发送回客户端的响应。所以,是的,服务器可以同时读写。

于 2015-05-14T10:59:29.687 回答
0

对于那些仍在寻找进一步解释的人。下面是一些使用 Java 套接字制作的简单游戏示例的链接。我发现有一些代码可以剖析和使用是很有帮助的。

http://cs.lmu.edu/~ray/notes/javanetexamples/

于 2017-05-05T14:59:26.123 回答