Java套接字编程

标签 java sockets serversocket tcpsocket

我有两个关于 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/

相关文章:

java - 解析日期以在 JPQL 查询中进行比较

java - ICEFaces/RichFaces/PrimeFaces 应用程序是 RIA 吗?

Java套接字接受队列长度

在 C 中的 UDP 客户端服务器中每秒计算吞吐量

Java 线程 NullPointerException 与 ServerSockets

java - 按钮始终设置为禁用

java - 带 OptaPlanner 的自行车信使/TSPPD

html - 这个套接字错误是什么意思?

java - Server Socket写的时候,是不是等到Client Socket读了?

java - 类的构造函数不创建类