加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService之Socket回顾

发布时间:2020-12-16 23:22:39 所属栏目:安全 来源:网络整理
导读:在学习Webservice之前回顾一下Socket: 服务端:Java提供了ServerSocket来对其进行支持。事实上当你创建该类的一个实例对象并提供一个端口资源,你就建立了一个固定位置可以让其他计算机来访问你了,如:ServerSocket server=new ServerSocket(7000); 这里需

在学习Webservice之前回顾一下Socket:

服务端:Java提供了ServerSocket来对其进行支持。事实上当你创建该类的一个实例对象并提供一个端口资源,你就建立了一个固定位置可以让其他计算机来访问你了,如:ServerSocket server=new ServerSocket(7000); 这里需要注意的是端口的指定问题(另外端口号是从0到65535之间的,前1024个端口已经被TCP/IP作为保留端口,因此你所分配的端口只能是1024个之后的。?

客户端:java同样提供了一个Socket对象来对其进行支持。只要客户方创建一个Socket的实例对象就可以了,如:
?? ? ?Socket client=new Socket(InetAddress.getLocalHost(),7000);

可是数据是如何传输的呢?

它提供了针对于字节流和Unicode的读和写,然后也提供了一个缓冲用于数据的读写,如:?
????BufferedReader in = new BufferedReader(
new InputStreamReader(server.getInputStream()));?

????PrintWriter out=new PrintWriter(server.getOutputStream());
????上面两句就是建立缓冲并把原始的字节流转变为Unicode可以操作。而原始的字节流来源于Socket的两个方法,getInputStream()和getOutputStream()方,分别用来得到输入和输出。

首先贴出一个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客户端可以通信
2、 IE可以访问java编写的socket服务,应用层的IE可以访问传输层的Socket

大致过程是:IE属于应用层,使用的通过Http协议封装消息发送到服务端,然而服务端使用传输层的Socket编写的,因此,由于通信两端的服务协议不一致导致两者通信出现问题,这就产生了协议不匹配问题,那么如果需要服务正确收到客户端的消息就需要解析Http协议。所以我们可以断定Socket不适合推广,原因如下:

1、Socket和Http协议不匹配问题

2、如果服务端的Socket需要添加和修改多个参数信息等操作的时候,对于服务端也需要修改,因此这就照成不便。

所以WEB服务几乎都用Webservice。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读