2011-12-21 150 views
1

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

1)是否有可能的读/通过相同的端口在我的情况下同时写,因为这将是一个HTTPS请求,从而端口将是443

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

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

回答

2

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

而且看看this tutorial

+3

[这个PDF](http://www.buyya.com/java/Chapter13.pdf)也是一个很好的资源,海事组织。 (只需添加更多的答案):-) – Deco 2011-12-21 00:46:54

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和其他应用程序服务器已经这样做了。如果这将是一个Web应用程序,您还需要考虑一个正确签名的数字证书。如果其内部网和浏览器用于访问它,则必须导入自己生成的自签名证书。

+0

正如我前面所述,它不是一个Web应用程序。这将是一个独立的应用程序。应用程序将使用主要方法启动。没有我们的组件参与。所以我想我不需要担心证书。 – AKV 2011-12-21 02:27:43

+1

即使它不是一个Web服务器,如果你使用SSL,你将需要担心证书。从你的问题说明https?其中使用http over ssl。 – 2011-12-21 08:25:53

0
  1. 创建端口的程序是服务器程序。

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

  3. 客户端不会创建端口唯一的服务器程序。客户端只向该服务器端口的服务器发送请求。所以程序中的任意数量的端口都是服务器端口。

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