使用Socket模拟一个简单的Webservice调用
webservice是对socket的一个封装,让远程调用调用变得更加简单,那么使用socket究竟有多么麻烦呢?来看看。
做一个简单的天气查询:
服务端:
public class SocketServer {
public static void main(String[] args) {
DataInputStream dataInputStream = null;
DataOutputStream dataOutputStream = null;
try {
// 启动socket服务端
ServerSocket serverSocket = new ServerSocket(8888);
/**
* 加上while(true),让服务端一直保持运行,负责当有一个客户端连接成功以后,服务端就停止运行了。
*/
while (true) {
// 监听客户端连接,accept()方法是阻塞方法,如果没有客户端连接,其后的代码不会执行
Socket socket = serverSocket.accept();
dataInputStream = new DataInputStream(
socket.getInputStream());
dataOutputStream = new DataOutputStream(
socket.getOutputStream());
//获得客户端传来的城市名称
String cityName = dataInputStream.readUTF();
System.out.println("from client..." + cityName);
//查询天气并返回查询结果
String result = "晴天";
dataOutputStream.writeUTF(result);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(dataOutputStream!=null)
dataOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(dataInputStream!=null)
dataInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端:
public class SocketClient {
public static void main(String[] args) {
Socket socket = null;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null;
try {
//创建Socket连接
socket = new Socket("127.0.01", 8888);
//得到输出流
dataOutputStream = new DataOutputStream(socket.getOutputStream());
//发送数据
dataOutputStream.writeUTF("海口");
//接收数据
dataInputStream = new DataInputStream(socket.getInputStream());
//得到输入流
String result = dataInputStream.readUTF();
System.out.println(result);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(socket!=null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(dataInputStream!=null)
dataInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(dataOutputStream!=null)
dataOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
使用socket都是用流来传输数据,要防止编码问题,要打开流,关闭流,而如果使用webservice则完全不必考虑这些。
使用Socket模拟一个简单的Webservice调用的更多相关文章
- 一个简单的webservice调用
我们先创建一个简单空web应用程序 然后添加新建项目 //我们创建一个peson对象,产生数据标识返回 using System; using System.Collections.Generic; ...
- 一个简单的webservice的demo(下)winform异步调用webservice
绕了一大圈,又开始接触winform的项目来了,虽然很小吧.写一个winform的异步调用webservice的demo,还是简单的. 一个简单的Webservice的demo,简单模拟服务 一个简单 ...
- 一个简单的Webservice的demo,简单模拟服务
前段时间一直在学习WCF,匆匆忙忙的把<WCF全面解析>和<WCF服务编程>看了一遍,好多东西都不是很懂,又听了一下WCF分布式开发的网络教程,算是马马虎虎的明白点了.回顾了一 ...
- 一个简单的Webservice的demo(中)_前端页面调用
首先新建项目,这里有两种调用方式,为了能方便理解,新建页面WebserviceTest如下图: 先引用写好的服务,这里用上次写好的服务.见上次写的一个简单的Webservice的demo,简单模拟服务 ...
- 一个简单的WebService实例
WebService在.NET平台下的作用是在不同应用程序间共享数据与数据交换. 要达到这样的目标,Web services要使用两种技术: XML(标准通用标记语言下的一个子集):XML是在web上 ...
- (转)Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
- Web Service入门简介(一个简单的WebService示例)
Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...
- 利用VS2008发布一个简单的webservice
一个开发好的webservice,怎样发布出去,供其他电脑访问呢? 本文将介绍如何发布一个简单的webservice,其中的内容都是在网上查看别人文章,自己仿照着做了一遍,因此,难免会发生错误,如果发 ...
- Socket——实现一个简单的静态网页服务器
整体结构就是使用ServerSocket监听一个地址,当有接受到请求之后,解析请求中的资源路径.服务器资源路径存放在项目下的一个目录中,服务器会到这个目录中根据请求的路径去寻找相应的资源.如果找到了则 ...
随机推荐
- Fibonacci数列对任何数取模都是一个周期数列
题目是要求出斐波那契数列n项对一个正整数取模,那么可以把斐波那契数列取模后得到的数列周期求出来. 比如下面一个题目:求出f[n]的后4位,先求出数列对10000取模的周期,然后再查找即可. #incl ...
- 最简单的CRC32源码-逐BYTE法
从按BIT计算转到按BYTE计算,要利用异或的一个性质,具体见前面的文章<再探CRC >. 其实方法跟逐BIT法是一样的,我们只是利用异或的性质,把数据分成一BYTE一BYTE来计算,一B ...
- 公告: 新博客已经迁移到 www.root.run
root.run www.root.run www.root.run/sitemap.html www.root.run/sitemap.xml
- 队列的实现(JAVA)
定义 队列(queue)是一种特殊的线性表,它只允许在表的前端进行删除,在表的后端进行插入. 进行插入端的称为队尾,进行删除端的称为队头.队列是先进先出原则的.队列的实现同样可以 使用两种方式来 ...
- _GUN_SOURCE宏
问题描述:在编译程序时,提示一个错误和一个警告. error:storage size of tz isn’t know: 其中tz是struct timezone类型的变量. warning:imp ...
- 用 Eclipse 开发 Android 应用程序
转自:http://www.apkbus.com/android-13828-1-1.html 开始之前 本教程介绍如何在 Eclipse 环境中进行 Android 应用程序开发,包括两个示例应用程 ...
- $(function(){})里面不能声明定义函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Hadoop-MapReduce之自定义数据类型
以下是自定义的一个数据类型,有两个属性,一个是名称,一个是开始点(可以理解为单词和单词的位置) MR程序就不写了,请看WordCount程序. package cn.genekang.hadoop.m ...
- Hadoop 中 Eclipse 的配置
先启动Hadoop守护进程,进入hadoop安装目录,执行bin/start-all.sh 主要是为了之后能正确测试 Ubuntu中下载安装Eclipse,执行sudo apt-get install ...
- (转)在Mac下使用OpenCV, 在Xcode下使用OpenCV (非常基础,详细)
转自:http://blog.sciencenet.cn/home.php?COLLCC=3456986939&COLLCC=3456885714&mod=space&uid= ...