繁体   English   中英

Java套接字编程

[英]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,则用于访问它的浏览器将必须导入一个自行生成的自签名证书。

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

看看这个教程

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

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

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

  4. 当客户端将请求发送到服务器时,服务器将获得一个放置请求的缓冲存储器,然后服务器将其读取。 服务器还获得了另一个缓冲存储器,服务器可以在其中写入发送回客户端所需的响应。 因此,是的服务器可以同时读写。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM