获取Socket的信息

在一个Socket中同时包含了远程服务器的IP地址和端口信息,以及客户本地的IP地址和端口信息。此外,从Socket对象中还可以获得输出流和输入流,分别用于向服务器发送数据,以及接受从服务端发来的数据。以下方法用于获取Socket的有关信息。

Socket socket=new Socket();
        socket.getInetAddress();//获得远程服务器的IP地址
        socket.getPort();//获得远程服务器的端口
        socket.getLocalAddress();//获得客户本地的端口
        socket.getInputStream();//获得输入流。如果Socket还没有连接
                                //或者已经关闭,或者已经通过shutdownInput()
                                //方法关闭输入流,那么此方法会抛出IOException
        socket.getOutputStream();//获得输出流如果Socket还没有连接
                                //或者已经关闭,或者已经通过shutdownOutput()
                                //方法关闭输出流,那么此方法会抛出IOException

如下例子用于访问网页v.qq.com/zt/tqzt/2817466.shtml。该网页位于一个主机名(也叫域名)为v.qq.com的远程服务器上,它监听80端口。在HTTPClient类中,先建立了一个连接到该HTTP服务器的Socket对象,然后发送符合HTTP协议的请求,接着接受从HTTP服务器发回的响应结果。:HTTP协议简介点这里

package 获取Socket的信息;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;

/**
 * HTTPClient类用于访问网页www.baidu.com。现在已经使用安全的http协议即HTTPS了,
 * 该网页位于一个主机名(也叫域名)为“www.baidu.com”的远程HTTP服务器上
 * HTTPS监听443端口,HTTP监听80端口,在HTTPClient类中,先建立了一个
 * 连接到该服务器的Socket对象,然后发送符合HTTP协的请求,接着接受从HTTP服务器上
 * 发回的响应结果。
 */
public class HTTPClient {
    String host="www.baidu.com";
    //String host="www.javathinker.net";
    int port=80;
    Socket socket;

    public  void crteateSocket() throws IOException {
        socket=new Socket("v.qq.com",80);
    }

    public void communicate() {
        //StringBuffer sb=new StringBuffer("GET "+"/zt/tqzt/2817466.shtml"+" HTTP/1.1\r\n");
        StringBuffer sb=new StringBuffer("GET http://v.qq.com/ HTTP/1.1\r\n");

        sb.append("Host:v.qq.com\r\n");
        sb.append("Connection: keep-alive\r\n");
        sb.append("Upgrade-Insecure-Requests: 1\r\n\r\n");

        try {
            //发出HTTP请求
            OutputStream socketOut=socket.getOutputStream();
            socketOut.write(sb.toString().getBytes());
            socket.shutdownOutput();//关闭输出流

            //接受响应结果
            InputStream socketInput=socket.getInputStream();
            //把接收到的字节写到ByteArrayOutputStream中,它具有一个容量自动增长的缓冲区
            ByteArrayOutputStream buffer=new ByteArrayOutputStream();

            /*byte[] buff=new byte[1024];
            int len=1;
            while ((len=socketInput.read(buff))!=-1){//如果返回-1,则表示读到了输入流到了结尾
                buffer.write(buff,0,len);
            }
            System.out.println(new String(buffer.toByteArray()));*/

            /**
             * 值得注意的是,如果接受的网页数据量很大,先把这些数据全部保存在
             * ByteArrayOutputStream的缓存中不是明智的做法,因为这些数据
             * 会占用大量的内存。更有效的方法是利用scanner来读取网页数据:
             */
            Scanner scannerSocket=new Scanner(socket.getInputStream());
            String data;
            while (scannerSocket.hasNextLine()){
                data=scannerSocket.nextLine();
                System.out.println(data);
            }

            /*BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String data;
            while ((data=br.readLine())!=null){
                System.out.println(data);
            }*/
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            /*关闭socket,当客户与服务器通信结束,应该及时关闭socket
            以释放Socket所占用的各种资源。Socket的close()方法负责关闭Socket
            当一个socket对象被关闭,就不能再通过他的输入流和输出流进行i/o操作
            ,否则会抛出IOException,为了确保关闭Socket的操作总是被执行,强烈
            建议把这个操作放在finally代码块中。
             */
            if (socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) throws IOException {
        HTTPClient cient=new HTTPClient();
        cient.crteateSocket();
        cient.communicate();
    }
}
### 回答1: 解密 socket 信息的方法取决于所使用的加密算法和密钥。 如果使用的是对称加密(例如 AES),则可以使用相同的密钥进行解密。如果使用的是非对称加密(例如 RSA),则需要使用解密用的私钥。 在任何情况下,都需要先获取加密信息的原文,然后再使用解密算法和密钥进行解密。 如果没有相应的密钥或私钥,则无法解密 socket 信息。 ### 回答2: 解密socket信息是指对通过socket传输的加密数据进行解码和还原,以便能够获取原始的信息内容。 要解密socket信息,首先需要知道所使用的加密算法和密钥。常见的加密算法有对称加密算法(如AES、DES等)和非对称加密算法(如RSA等)。对称加密算法使用相同的密钥进行加解密,而非对称加密算法使用一对密钥,公钥用于加密,私钥用于解密。 解密socket信息的步骤如下: 1. 确定加密算法和密钥:确定所使用的加密算法和相应的密钥,获取相关的密钥材料。 2. 接收加密数据:通过socket接收加密数据。 3. 解密数据:使用相应的解密算法和密钥,对接收到的加密数据进行解密操作。 4. 还原原始信息:解密后的数据可能是原始信息经过编码(如Base64)的形式,需要根据具体的编码方式进行还原,以获取原始信息内容。 需要注意的是,解密socket信息需要保证密钥的安全性,以免被恶意获取和利用。在设计网络通信时应采用适当的加密算法和密钥管理机制,以确保数据传输的机密性和完整性。 ### 回答3: 解密socket信息涉及到两个方面的内容:加密算法和解密过程。 首先,了解加密算法是解密socket信息的关键。常用的加密算法有对称加密和非对称加密。对称加密算法采用相同的密钥进行加密和解密,例如DES、AES等。而非对称加密算法则使用公钥进行加密,私钥进行解密,常见的有RSA算法。 其次,解密socket信息的过程包括以下几个步骤: 1. 获取加密后的socket信息。在进行解密之前,需要获得被加密的socket信息。 2. 识别对称或非对称加密算法。根据交流双方约定的规则,确定使用的是对称还是非对称加密算法。 3. 获得解密所需的密钥或公私钥对。对称加密需要获得相同的密钥,而非对称加密需要获得相应的公私钥对。 4. 进行解密操作。根据所选的解密算法和密钥,对加密后的socket信息进行解密操作。 5. 获取解密后的明文信息。解密后会得到原始的明文socket信息。 需要注意的是,解密socket信息需要具备解密所需的密钥或公私钥对,并且需要确保解密的过程在安全的环境中进行,以防止信息泄漏。 总结来说,解密socket信息的关键是了解加密算法并获取相应的密钥或公私钥对,然后根据算法和密钥进行解密操作,最终获取明文信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值