`
huangjiateng
  • 浏览: 37903 次
社区版块
存档分类
最新评论

web_SOCKET

 
阅读更多
package com.gatgets.http.webservice;




import java.io.ByteArrayOutputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

import java.util.UUID;

import java.util.regex.Matcher;

import java.util.regex.Pattern;




/**

* socket客户端(下载网页及元素,暂不支持断点传续)

* @author 王正镇

* @date 2011-8-12

*/

public class MyClient {




private static Pattern p = null;




static {

p = Pattern.compile("http://(.+?):?(\\d+)?(/.*)?");

}



public static void getResource(String url) throws Exception {



int port; // 端口号

String host; // 主机

String resourcePath; // 请求路径



Matcher m = p.matcher(url);

if (m.matches()) {



host = m.group(1);

port = m.group(2) == null ? 80 : Integer.parseInt(m.group(2)); // 默认端口 80

resourcePath = m.group(3) == null ? "/" : m.group();



} else {

throw new Exception("请输入合法的连接地址");

}



Socket socket = new Socket(host, port);

// 使用socket get连接

OutputStream os = socket.getOutputStream();

// 请求消息头

String lineSeparator = System.getProperty("line.separator");

os.write(("GET " + resourcePath + " HTTP/1.1" + lineSeparator).getBytes());

os.write(("Host: " + host + lineSeparator).getBytes());

os.write(lineSeparator.getBytes());

// 获得返回结果

InputStream is = socket.getInputStream();

// 读取流(必须用二进制读取)

// 读取头消息(跳过)

BinaryInputStream bis = new BinaryInputStream(is);

String tmp = "";

while (!(tmp = bis.readLine()).equals("")) {

System.out.println(tmp);

}

bis.close();

// 保存(以下所有内容)

String filePath = ClassLoader.getSystemResource("").toString().substring(5); // 文件路径

String filename = filePath + UUID.randomUUID().toString(); // 产生一个随机文件名

// 如果有扩展名,则加上扩展名

int indexDoc = -1;

if ((indexDoc = resourcePath.lastIndexOf(".")) != -1) {

filename += resourcePath.substring(indexDoc);

}

OutputStream filenameOS = new FileOutputStream(filename);

copyStream(is, filenameOS);



System.out.println("----------------------" + filename + "------------------------");



os.close();

is.close();

filenameOS.close();

}



/**

* 复制流

* @throws IOException

*/

public static void copyStream(InputStream is, OutputStream os) {



byte[] b = new byte[2048]; // 缓存

int length = 0;

try {

while ((length = is.read(b)) > 0) {

os.write(b, 0, length);

}

} catch (Exception e) {

e.printStackTrace();

}

}



/**

* 执行入口

* @param args

*/

public static void main(String[] args) {



try {

getResource("http://www.baidu.com:80");

getResource("http://www.google.com.hk/intl/zh-CN/images/logo_cn.png");

} catch (Exception e) {

e.printStackTrace();

}

}



}




/**

* 不同系统分隔符不相同

* @author 王正镇

* @date 2011-8-12

*/

class BinaryInputStream {



private enum SYSTYPE{LINUX, WINDOWS};



private ByteArrayOutputStream bos = null;

private InputStream is = null;

private SYSTYPE type = null; // 系统类型




public BinaryInputStream(InputStream is) {

this.is = is;

this.bos = new ByteArrayOutputStream();

this.type = System.getProperty("line.separator").length() > 1 ? SYSTYPE.WINDOWS : SYSTYPE.LINUX;

}



/**

* 读取一行

* @return

* @throws IOException

*/

public String readLine() throws IOException {



String str = ""; // 返回结果

int b = -1;



while (is != null && (b = is.read()) != -1) {

// windows下换行符

if (b == '\r' && type == SYSTYPE.WINDOWS) {

if (is.read() == '\n') {

str = bos.toString();

bos.reset(); // 重置

break;

}

}

// linux下换行符

if (b == '\n' && type == SYSTYPE.LINUX) {

str = bos.toString();

bos.reset(); // 重置

break;

}

bos.write(b);

}

return str.trim();

}



public void close() throws IOException {

if (bos != null) {

bos.close();

}

}

}
分享到:
评论

相关推荐

    web_socket_channel:WebSocket的StreamChannel包装器

    web_socket_channel包为WebSocket连接提供包装器。 它提供了一个跨平台的 API,该API的跨平台实现(可在基础上进行通信), 封装dart:io的WebSocket类的以及封装dart:html的实现。 它还在为WebSocket协议的预定义...

    web_socket java版实时聊天室

    - `Web Socket Server`:这是一个可能的Java WebSocket服务器实现,包含处理WebSocket连接、解析和响应消息的逻辑。 综合上述信息,我们可以理解这是一个使用HTML5 WebSocket和Java技术构建的实时聊天室示例,包含...

    12.Web_Socket_STM32+W5500_

    标题 "12.Web_Socket_STM32+W5500_" 暗示了这是一个关于使用STM32微控制器和W5500网络接口芯片实现Web Socket通信的项目。STM32是一款广泛使用的基于ARM Cortex-M内核的微控制器,而W5500则是一个集成SPI接口的...

    NIM_Web_Demo-master.zip_fix6x5_nim web_socket聊天室_websocket_即时通讯

    该话题源于名为"NIM_Web_Demo-master.zip_fix6x5_nim web_socket聊天室_websocket_即时通讯"的压缩包文件,它包含了一个用于演示的项目,旨在模拟一个小型环境下的即时通讯系统。 首先,我们要了解WebSocket协议。...

    web-socket-js

    web-socket-js亲测可用

    web_socket node.js测试

    WebSocket是Web通信协议的一种,它允许在客户端和服务器之间建立持久的、低延迟的全双工连接,极大地改进了Web应用程序的实时性。在本文中,我们将深入探讨WebSocket技术,并结合Node.js环境,通过示例代码来理解...

    STM32H7FreeRTOS_LWIP_web_server_socket

    STM32H7FreeRTOS_LWIP_web_server_socket是一个基于STM32H7微控制器、FreeRTOS实时操作系统、LWIP轻量级网络协议栈的简单Web服务器实现。这个项目的核心是利用STM32的强大处理能力,通过FreeRTOS进行任务调度,结合...

    WEB_server_to_create_Java_code_achieve_Socket.rar_java web serve

    本主题聚焦于使用Java编程语言通过Socket来实现一个简单的Web服务器。Socket在计算机网络中扮演着通信桥梁的角色,允许两个程序之间建立连接并交换数据。 首先,我们要理解Java中的Socket编程。Socket是Java网络...

    web-socket-js.zip

    在标题提到的"web-socket-js.zip"压缩包中,包含了实现WebSocket功能的一个JavaScript库,用于解决安卓4及以下版本不支持原生WebSocket的问题。 在Android 4以下的版本中,由于浏览器对HTML5新特性的支持不足,...

    Simple_Web_Socket:简单的Web套接字编程

    总的来说,"Simple_Web_Socket"项目提供了一个宝贵的实践机会,让你能够深入理解WebSocket协议和底层网络编程,对于希望在C语言环境下实现Web套接字功能的开发者来说,这是一个非常有价值的资源。

    Net_Socket

    《深入理解Net_Socket:构建网络通信的核心技术》 在计算机网络编程中,Socket被誉为“互联网的插座”,它是实现进程间通信...无论是构建高性能的Web服务器,还是设计实时的网络游戏,Net_Socket都是不可或缺的工具。

    sio_socket, websocket的使用与封装

    在Web应用中,WebSocket为需要实时交互的服务提供了强大的支持,比如在线游戏、股票交易、聊天室等。 `sio_socket`是一个基于WebSocket的库,它为开发者提供了更方便的方式来处理WebSocket连接和通信。这个库可能...

    server_socket.zip_Server_Socket co_gateway

    在"server_socket.zip"中,"web"和"colibri_helpers"这两个文件夹可能包含的是与Web通信相关的示例代码和辅助工具。"colibri_helpers"可能是一些通用的辅助类或函数,帮助处理网络通信中的各种任务,如数据编码解码...

    Test_final.zip_Final Test_java web_vertical577_web socket_websoc

    标题中的"Test_final.zip_Final Test_java web_vertical577_web socket_websoc"表明这是一个关于Java Web项目的最终测试,特别关注了垂直577(可能是项目编号或特定需求)以及Web Socket技术,用于实现实时通信。Web...

    witdbct_socket.zip

    在IT行业中,Socket编程是一种基础且重要的网络通信技术,它为应用程序提供了低级别的网络通信接口。...对于开发者来说,熟练掌握Socket编程是构建网络应用的基础,如Web服务器、即时通讯软件、在线游戏等。

    BBS.rar_bbs jsp_jsp web socket_websocket.jar jsp_意见系统

    【标题】"BBS.rar_bbs jsp_jsp web socket_websocket.jar jsp_意见系统" 描述了一个基于JSP技术构建的Web应用程序,该程序主要用于实现一个BBS(电子公告板)系统,目的是促进用户之间的信息交流和意见分享。...

    HTTP-and-Socket.rar_http socket_java socket http_socket_socket

    HTTP是应用层协议,主要用于Web浏览器和服务器之间的通信,而Socket则是低级别的网络编程接口,提供了进程间通信(IPC)的能力,允许应用程序通过网络进行数据交换。下面将详细讨论这两个概念以及它们之间的关系。 ...

    web_socket:使用webSocket搭建后台消息推送服务,消息确认,消息日志,内网下app消息推送

    web_socket使用webSocket搭建后台消息推送服务,消息确认,消息日志,内网下app消息推送#svg顺便有个svg文件动态缩放功能,用到了jquery.svg.pan.zoom.js具体操作左键双击可以放大,滚轮也可以操作参考 ...

    web_socket

    web_socket 一个新的Flutter应用程序。入门该项目是Flutter应用程序的起点。 如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门:要获得Flutter入门方面的帮助,请查看我们的,其中提供了教程,示例,...

    socket--API.rar_Socket API_Socket QQ_vc socket api_webclient soc

    - 虽然标题中提到了"webclient soc",但描述中提到的是基于TCP的Socket API,所以这里可能是指在Web客户端实现类似TCP Socket的功能,如使用JavaScript的WebSocket API。 实现TCP Socket通信的基本步骤包括: 1. ...

Global site tag (gtag.js) - Google Analytics