[英]Java Socket programming
我在Java套接字编程中有两个问题。 这将是独立的应用程序,仅在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和其他应用服务器已经做到了。 如果这将是一个Web应用程序,则还需要考虑一个经过正确签名的数字证书。 如果其Intranet,则用于访问它的浏览器将必须导入一个自行生成的自签名证书。
对于您的两个问题,答案都是肯定的。 对于第二个问题,您将需要创建一个线程来侦听服务器上的活动。
看看这个教程
正在创建端口的程序是服务器程序。
在服务器程序中,您可以创建多个侦听客户端请求的端口。
客户端不创建仅服务器程序创建的端口。 客户端仅向该服务器端口上的服务器发送请求。 因此,程序中任意数量的端口始终是服务器端口。
当客户端将请求发送到服务器时,服务器将获得一个放置请求的缓冲存储器,然后服务器将其读取。 服务器还获得了另一个缓冲存储器,服务器可以在其中写入发送回客户端所需的响应。 因此,是的服务器可以同时读写。
对于那些仍在寻找进一步解释的人。 这是使用Java套接字制作的一些简单游戏示例的链接。 我发现分解并使用一些代码很有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.