WebService之Socket回顾
在学习Webservice之前回顾一下Socket: 服务端:Java提供了ServerSocket来对其进行支持。事实上当你创建该类的一个实例对象并提供一个端口资源,你就建立了一个固定位置可以让其他计算机来访问你了,如:ServerSocket server=new ServerSocket(7000); 这里需要注意的是端口的指定问题(另外端口号是从0到65535之间的,前1024个端口已经被TCP/IP作为保留端口,因此你所分配的端口只能是1024个之后的。?) 客户端:java同样提供了一个Socket对象来对其进行支持。只要客户方创建一个Socket的实例对象就可以了,如: 可是数据是如何传输的呢?
它提供了针对于字节流和Unicode的读和写,然后也提供了一个缓冲用于数据的读写,如:? ? 首先贴出一个Socket通信的例子: 服务端: package com.j2se.socket; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class MyServerSocket { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub int port = 8400; ServerSocket ss = new ServerSocket(port); System.out.println("等待中-----"); while (true) { final Socket s = ss.accept(); new Thread() { @Override public void run() { try { System.out.println("连接成功..."); BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream(),"utf-8")); String result = br.readLine(); System.out.println("服务器接收客户端的消息是:" + result); BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(s.getOutputStream(),"utf-8")); bw.write("你好啊,客户端....rn"); bw.newLine();//换行符 bw.flush(); s.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); } } } 客户端: package com.j2se.socket; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class ClientSocket { /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub // String ipAddr="127.0.0.1"; InetAddress ipAddr = InetAddress.getLocalHost(); int port = 8400; Socket client = new Socket(ipAddr,port); BufferedReader br = new BufferedReader(new InputStreamReader( client.getInputStream(),"utf-8")); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( client.getOutputStream(),"utf-8")); // 客户端写数据 bw.write("你好,服务器....");// 或者"你好,服务器....、rn" bw.newLine();// 换行符 bw.flush(); // 先要读数据,证明是否连接成功 System.out.println("连接服务器返回去的消息:" + br.readLine()); br.close(); bw.close(); } } 接下来的说明的问题是: 1、java编写的Socket服务端,其他语言如C#等语言写的socket客户端可以通信 大致过程是:IE属于应用层,使用的通过Http协议封装消息发送到服务端,然而服务端使用传输层的Socket编写的,因此,由于通信两端的服务协议不一致导致两者通信出现问题,这就产生了协议不匹配问题,那么如果需要服务正确收到客户端的消息就需要解析Http协议。所以我们可以断定Socket不适合推广,原因如下: 1、Socket和Http协议不匹配问题 2、如果服务端的Socket需要添加和修改多个参数信息等操作的时候,对于服务端也需要修改,因此这就照成不便。 所以WEB服务几乎都用Webservice。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |