So easy Webservice 1.Socket建设web服务
socket 是用来进行网络通讯的,简单来说,远程机器和本地机器各建一个socket,然后通过该socket进行连接通讯
socket简单模型图:

socket的原理图:

代码实现:
1.创建socket服务端:用于处理客户端发送的请求数据
新建socket_server项目,添加SocketServer.java,然后run main方法,服务端处于等待客户端状态。
public class SocketServer {
/**
* 服务器端口
*/
private static int port = 9999;
public static void main(String[] args) {
try {
//1.创建ServerSocket对象,用于让客户端连接
ServerSocket serverSocket = new ServerSocket(port);
//2.线程等待,直到收到客户端请求,进行处理
while(true){
System.out.println("等待客户端请求---");
Socket socket = serverSocket.accept();//收到客户端请求
//3.获取输入流对象InputStream,用于获取客户端发送的数据
InputStream in = socket.getInputStream();
byte[] b = new byte[1024];
in.read(b);
String req = new String(b, 0, b.length);//从0-length
System.out.println("获取客户端数据success,reqData = "+req);
//4.获取输出流对象OutputStream,用于给客户端返回数据
OutputStream out = socket.getOutputStream();
//转大写后,返回给客户端
out.write(req.toUpperCase().getBytes());
//5.结束通信,关闭socket,关闭流
in.close();
out.close();
socket.close();
}
} catch (UnknownHostException e) {
System.out.println("---找不到服务器的端口---");
e.printStackTrace();
} catch (IOException e) {
System.out.println("---通信错误---");
e.printStackTrace();
}
}
}
2.创建客户端
新建一个socket_client项目,添加SocketClient.java
public class SocketClient {
/**
* 服务器ip地址
*/
private static String host = "127.0.0.1";
/**
* 服务器端口
*/
private static int port = 9999;
public static void main(String[] args) {
try {
//1.创建socket对象,用于向服务端发送请求
Socket socket = new Socket(host, port);
//2.获取输出流对象OutputStream,用于给服务端输出数据
OutputStream out = socket.getOutputStream();
//输入字符串
System.out.println("请输入字符串:");
Scanner input = new Scanner(System.in);
String reqStr = input.next();
//输出到服务器
out.write(reqStr.getBytes());
//3.获取输入流对象InputStream,用于输入服务端返回处理后的数据
InputStream in = socket.getInputStream();
//获取服务端返回的数据
byte[] b = new byte[1024];
in.read(b);//将字节输入到b中
String respStr = new String(b, 0, b.length);
System.out.println("服务端处理后的结果:"+respStr);
//4.关闭socket,关闭流,结束通信
in.close();
out.close();
socket.close();
} catch (UnknownHostException e) {
System.out.println("---找不到服务器的端口---");
e.printStackTrace();
} catch (IOException e) {
System.out.println("---通信错误---");
e.printStackTrace();
}
}
}
3.启动客户端:
客户端 控制台: 请输入字符串:hello(输入后回车) 服务端处理后的结果:HELLo --------------------------------------------
服务端 控制台: 等待客户端请求--- 获取客户端数据success,reqData = hello
测试:
1.通过C#客户端来访问Java的Socket服务

2.通过IE来访问SocketService

accept success.......
从客户端传送来的数据如下:
POST / HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:9999
Content-Length: 10
Connection: Keep-Alive
Cache-Control: no-cache
word=hello
测试结果:
1.1: 不同的语言支持Socket通信吗? 支持(经测试,上面的socketserver端程序,使用c#,web浏览器也可以访问)
1.2: 不同的协议支持Socket通信吗? web程序可以调用socket请求,但是由于协议不同,因此在处理的时候要过滤http的协议格式,返回的时候还需要添加 http返回的格式
1.3: 如果参数多: 可维护性就比较低
1.4: Socket服务有利于推广吗? 不利
总结:
* 服务端流程:
* 1.创建ServerSocket对象,用于让客户端连接
* 2.获取socket对象,线程等待,直到收到客户端请求
* 3.获取输入流对象InputStream,用于获取客户端发送的数据
* 4.获取输出流对象OutputStream,用于给客户端返回数据
* 5.结束通信,关闭socket,关闭流
*
* socket和webservice比较,缺点:
* 1.Socket服务不利于推广(如果让别人知道你的Socket服务)
* 2.Socket处于传输层, 有可能无法穿越防火墙
* 3.Socket本身处于传输层,要处理应用层的服务要解析HTTP协议比较麻烦,但是现在我们的应用都是基于web的, web中的数据传输就需要HTTP协议
* 4.即使定义了格式. 后面如果格式改变则客户端格式都需要同步变化维护困难
/**
* 客户端流程:
* 1.创建socket对象,用于向服务端发送请求
* 2.获取输出流对象OutputStream,用于给服务端输出数据
* 3.获取输入流对象InputStream,用于接受服务端返回处理后的数据
* 4.结束通信,关闭socket,关闭流
* @author mlxs
*
*/
So easy Webservice 1.Socket建设web服务的更多相关文章
- 基于Socket创建Web服务
基于Socket创建Web服务 为什么要使用Socket呢,我们来看下图
- Web Service 实例基于Socket创建Web服务
ServerSocket服务器端代码如下: public static void main(String[] args) throws IOException { // 1:建立服务器端的tcp so ...
- tomcat+webservice实现简单的web服务远程调用接口
1,准备工作: ①需要使用到jaxws的一系列架包,网址:http://jax-ws.java.net,我下的是比较新的一个版本(下载好以后吧架包发在lib下),②webservice的一个工具 ...
- Asp.net web服务处理程序(第六篇)
四.Web服务处理程序 对于Web服务来说,标准的方式是使用SOAP协议,在SOAP中,请求和回应的数据通过XML格式进行描述.在Asp.net 4.0下,对于Web服务来说,还可以选择支持Ajax访 ...
- (七)CXF之与spring整合发布web服务
一.需求分析 用spring发布服务 二.案例 2.1 引入maven依赖 <dependencies> <!-- 添加Spring支持 --> <dependency& ...
- (四)输入参数与输出类型为复杂类型的web服务
一. 服务端发布服务 1.1 定义复杂类型:UserBean.java package service; public class UserBean { private String userId; ...
- So easy Webservice 6.使用EndPoint发布webservice服务
创建第一个Web服务: @WebService // 添加了此注解,代表是一个WebService public class HelloWorld { // 非 static final privat ...
- Delphi XE5通过WebService开发Web服务端和手机客户端
Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices stand-alone vcl applicati ...
- [lucene系列笔记3]用socket把lucene做成一个web服务
上一篇介绍了用lucene建立索引和搜索,但是那些都只是在本机上运行的,如果希望在服务器上做成web服务该怎么办呢? 一个有效的方法就是用socket通信,这样可以实现后端与前端的独立,也就是不管前端 ...
随机推荐
- 【python cookbook】【字符串与文本】16.以固定的列数重新格式化文本
问题:重新格式化一些很长的字符串,以指定的列数来显示 解决方案:textwrap模块的fill()方法来实现 # A long string s = "Look into my eyes, ...
- iOS 学习笔记 二 (2015.02.26)
How To Use Git Source Control with Xcode in iOS 6 If you're new here, you may want to subscribe to m ...
- seo伪原创技术原理分析,php实现伪原创示例
seo伪原创技术原理分析,php实现伪原创示例 现在seo伪原创一般采用分词引擎以及动态同义词库,模拟百度(baidu),谷歌(google)等中文切词进行伪原创,生成后的伪原创文章更准确更贴近百度和 ...
- PHP过滤评论关键词
<?php /** * PHP中屏蔽过滤指定关键字实现方法总结 * http://www.111cn.net/phper/phpanqn/46225.htm * * 思路: * 一.把关键字专门 ...
- android studio自动导包
http://blog.csdn.net/buaaroid/article/details/44979629 关于导包的设置以上博文解释的很清楚,在此主要强调下这一句: Add unambiguous ...
- app缓存设计-文件缓存
采用缓存,可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览.下边我简略列举一下缓存管理的适用环境: 1. 提供网络服务的应用 2. 数据更新不需要实时更新,哪怕是3-5分钟的延迟也是可以采用缓 ...
- Windows手动添加开机启动项
@方法1. 添加程序完整路径到注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下 或者添加到HKEY_CURREN ...
- 2016年11月2日 星期三 --出埃及记 Exodus 19:18
2016年11月2日 星期三 --出埃及记 Exodus 19:18 Mount Sinai was covered with smoke, because the LORD descended on ...
- AsyncTask的注意事项
1.6之前:AsyncTask是串行的 1.6~2.3:改成了并行的,同时最多只能执行5个 从1.6开始,AsyncTask引入了线程池,支持同时执行5个异步任务,也就是说同时只能有5个线程运行,超过 ...
- TCP、UDP
双方都是一种网络传输协议 2.TCP需要建立连接,而UDP不需要建立连接(无连接传输) 3.是否建立真实连接的特性,造成了双方可靠性的差距. TCP属于可靠的传输协议:因为传输前双方建立好了连接,相当 ...