`

socket模拟http访问得到返回数据的编码问题

 
阅读更多

模拟socket请求代码如下

 

public class HttpTest {
 public static void main(String[] args) throws Exception, IOException {
  Socket socket = new Socket("www.baidu.com",80);
  OutputStream os = socket.getOutputStream();
  StringBuffer sb = new StringBuffer();
  sb.append("GET https://www.baidu.com/ HTTP/1.1\r\n");
  sb.append("Host: www.baidu.com\r\n");
  sb.append("\r\n");
  byte[] bytes = sb.toString().getBytes();
  os.write(bytes);
  InputStream iStream  = socket.getInputStream();
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  byte[] bss = new byte[1024];
  int len = -1;
  while((len = iStream.read(bss)) != -1){
   baos.write(bss,0,len);
  }
  System.out.println(new String(baos.toByteArray(), "gbk"));
  socket.close();
 }
}

 

这里的问题是为什么要new一个字符串时要用“gbk“编码。这是因为虽然我的eclipse默认编码是utf-8但是我的系统的编码字符集是gbk,socket连接得到数据用ByteArrayOutputStream接受,不管对面用的什么编码发送数据,系统的socket是会将数据转化为gbk编码的字节流。而ByteArrayOutputStream不加修饰的接受这些字节流。因此new字符串的时候要用”gbk“编码。但是eclipse编辑设置的是utf-8那显示的时候不会出错吗?其实new字符串可以看成用什么编码方式解读这些字符串。比如值为46018的两个字节用gbk解读那就是“陈”,那虚拟机?用的是utf-8编码,就会自动翻译成9648存储并展示

分享到:
评论

相关推荐

    Android下socket模拟http server

    在Android平台上,我们可以利用Socket编程来模拟一个简单的HTTP服务器,以提供本地文件系统中的资源,如HTML文件,供外部设备(如浏览器)访问。这个过程涉及到Android系统的网络权限管理、Socket编程以及HTTP协议的...

    利用Socket实现远程DOS控制

    未经授权的访问可能会导致数据泄露、系统破坏等问题。因此,在实际应用中,需要采取安全措施,如使用加密通信、身份验证和权限控制等,以防止未授权的远程控制。 总结起来,这个项目展示了如何使用Socket实现简单的...

    基于socket的rpc

    然而,基于Socket的RPC实现存在一些限制,如手动处理网络连接、数据编码解码等,这可能导致效率低下且易出错。因此,通常会考虑使用更高级的通信框架,如Netty。Netty是一个高性能、异步事件驱动的网络应用程序框架...

    远程桌面监控简易源码.rar

    5. 将编码后的图像数据通过Socket的OutputStream发送给客户端。 客户端的实现则包括: 1. 创建Socket,指定服务器的IP地址和端口号,建立到服务器的连接。 2. 通过Socket的InputStream接收服务器发送的图像数据。 3...

    Java编写的简单爬虫程序

    在爬虫中,Socket用于创建TCP连接,向服务器发送HTTP请求,接收返回的HTML数据。通常,我们需要设置HTTP头信息,比如User-Agent,以模拟浏览器行为。 3. **HTTP协议**:理解HTTP协议是爬虫开发的关键。HTTP是互联网...

    TCP简单信息通信案例Unity个人

    - **线程安全**:如果多线程访问Socket,需要确保数据收发过程的线程安全,避免数据混乱。 7. **调试与测试**: - **日志记录**:在开发过程中,记录网络通信的日志可以帮助排查问题,了解数据传输的状态。 - **...

    loadrunner常见录制问题整理

    通过以上步骤设置后,LoadRunner将能够正确识别和处理UTF-8编码的网页内容,避免字符乱码问题。 #### 三、HTML-based script与URL-based script的区别是什么? LoadRunner提供了两种不同的录制模式:...

    C#实现远程桌面共享源代码.rar

    在IT领域,远程桌面共享是一种常见且实用的技术,它允许用户通过网络访问并控制其他计算机的桌面环境。本文将深入探讨使用C#编程语言实现远程桌面共享的关键知识点,并结合提供的"客户端"和"服务器端"源代码进行分析...

    php 抓取类 post 参数

    在这个场景中,`HttpClient`类用来模拟用户填写表单并提交数据的行为。 2. **urlencode**: - 在发送POST数据时,参数通常需要进行编码,以确保它们可以正确地在网络上传输。`urlencode`是PHP中的一个函数,用于对...

    LR性能计数器的分析

    这里展示了一部分代码,用于模拟FTP数据交互过程,包括发送数据、接收数据以及对返回数据的处理等。 #### 四、总结 通过对LR性能计数器的深入分析,我们可以更准确地定位系统性能瓶颈,优化系统架构和提升用户...

    java源码包---java 源码 大量 实例

    得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口函数得到远程接口的引用,用远程接口的引用访问EJB。 EJB中JNDI...

    网络会议系统(java课程设计)

    2. **数据编码与解码**:音频、视频数据需要经过编码和解码才能在网络上传输。这可能涉及到像G711或H.264这样的编解码算法。 3. **实时传输协议(RTP)**:对于音频和视频流,可能使用RTP协议来确保数据的实时性和...

    Python爬虫基础之Urllib库

    1. 访问 URL 读取返回结果 Urllib 库的 urlopen 函数可以用来访问 URL,并读取返回结果。该函数的第一个参数是 URL,第二个参数是要传送的数据,第三个参数是超时时间。其中,URL 是必须要传送的,data 和 timeout ...

    web server and browser

    4. **数据传输**:服务器将生成的响应编码为HTTP格式,然后通过`Socket`的输出流发送回客户端。响应通常包括状态码(如200表示成功,404表示未找到),响应头部,以及响应体(例如HTML内容)。 5. **连接关闭**:...

    VC自动登录telnet发送命令(改进版)

    3. **读取服务器响应**:使用`recv()`函数接收服务器返回的数据,确认是否已成功登录。 4. **发送命令**:登录成功后,可以使用`send()`函数发送预设的命令。 5. **关闭连接**:完成操作后,需要关闭socket连接,...

    C#版的HTTP代理源码(完整版) (支持MSN和QQ代理上网)

    这通常涉及到解码和编码特定的网络包,以及模拟必要的网络交互。 QQ代理可能涉及到TCP连接的建立和维持,以及数据包的格式转换,因为QQ可能使用非标准的HTTP头或者自定义的TCP握手过程。MSN代理则可能涉及MSN ...

    Jmeter Java Request Demo

    这通常涉及到Socket编程,包括Socket的创建、数据的编码与解码等步骤。 HTTP请求则是我们最常见的网络请求类型,用于访问Web服务。在JMeter中,可以使用HTTP Request sampler直接进行HTTP(S)的请求,包括GET、POST...

    QT网络调试助手

    在网络调试方面,QT网络模块提供了低级别的socket编程接口,允许开发者直接操作套接字进行数据传输。这个助手可能使用了QT的QNetworkAccessManager类,该类封装了HTTP、FTP等网络协议,使得发送HTTP请求或接收响应变...

    用python脚本24小时刷浏览器的访问量方法

    如Python爬虫、Django框架获取IP地址、使用代理访问、访问Access数据库、微信小程序、王者荣耀刷金币以及投票刷票脚本,这些都是Python在实际应用中的各种实例,展示了Python在数据抓取、自动化和游戏辅助等方面的...

Global site tag (gtag.js) - Google Analytics