首页 > 编程语言 > 详细

Java之旅--通讯

时间:2015-03-24 01:43:16      阅读:310      评论:0      收藏:0      [点我收藏+]


概述


通讯,源于网络,网络从下到上,分为7层:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层;通讯,基于协议,常用的协议有很多,比如网络层协议IP、传输层协议TCP/UDP、应用层协议HTTP/SOAP/REST等。

我们还会经常听到Socket,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。有个形象的比喻:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

任何语言,都会提供对通讯的支持,我们今天用Java语言,演示几种在Java中比较常用的通讯技术,包括:Socket、Http、REST、Dubbo、Thrift、FTP。


Socket


SocketServer.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
	public static void main(String[] args) {
		SocketServer ss = new SocketServer();
	
        //设定服务端的端口号  
		ServerSocket s = null;
		try {
			s = new ServerSocket(10099);
			System.out.println("ServerSocket Start:"+s); 
			while(true)
			{
				Socket socket = s.accept();	//这个地方是阻塞的
				System.out.println("Server_Accept:"+socket);  
				SocketServer.HandleSocket vsm = ss.new HandleSocket(socket);
				new Thread(vsm).start();
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}  finally
		{
			try {
				s.close();
			} catch (IOException e) {
			}
		}
	}
	
	class HandleSocket implements Runnable
	{
		private Socket socket;
		
		public HandleSocket(Socket socket)
		{
				this.socket = socket;
		}
		@Override
		public void run() {	        
	        BufferedReader br = null;  
	        PrintWriter pw = null;
	        try {
	            //用于接收客户端发来的请求  
	            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
	            //用于发送返回信息,可以不需要装饰这么多io流使用缓冲流时发送数据要注意调用.flush()方法  
	            pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); 
                String str = br.readLine(); 
                if(str != null)
                {
	                pw.println("OK_"+Thread.currentThread().getName());  
	                pw.flush();
                	System.out.println("Command:"+str);
                }   
	        } catch (Exception e) {  
	            e.printStackTrace();  
	        }finally{  
	            System.out.println("Server_Close:"+socket);  
	            try {  
	                br.close();  
	                pw.close();  
	                socket.close();  
	            } catch (Exception e2) {	                  
	            }  
	        }
		}
	}
}

SocketClient.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;

public class SocketClient {
	public static void main(String[] args) throws InterruptedException {
		for(int i=0;i<10;i++) {
			call( "Hello" + i);
		}
	}
	public static void call(String command) {
	    Socket socket = null;  
	    BufferedReader br = null;  
	    PrintWriter pw = null;
	    try {  
	        //客户端socket指定服务器的地址和端口号  
	        socket = new Socket("127.0.0.1", 10099);  
	        System.out.println("Client_Open" + socket + " Command:" + command);  
	        //同服务器原理一样  
	        br = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
	        pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));  
	        pw.println(command);  
	        pw.flush(); 
	        String str = br.readLine(); 
	        System.out.println("Client_Receive:"+str);
	    } catch (Exception e) {  
	        e.printStackTrace();  
	    } finally {  
	        try {  
	            System.out.println("Client_Close:"+socket);  
	            br.close();  
	            pw.close();  
	            socket.close();  
	        } catch (Exception e) {  
	            e.printStackTrace();  
	        }  
	    }
	}
}

Http


HttpConnection演示:HttpConnectionTest.java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;


public class HttpConnectionTest {
	public static void main(String[] args) throws Exception {
		System.out.println("begin send");
		String inputParam = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><content>Test</content></page>";
		
		URL url = null;
		HttpURLConnection httpConn = null;
		OutputStream output = null;
		OutputStreamWriter outr = null;
		
		//url = new URL("http://127.0.0.1:8888/iotest/ReadServlet");
		url = new URL("http://www.baidu.com");
		httpConn = (HttpURLConnection) url.openConnection();
		httpConn.setConnectTimeout(30000);  
		httpConn.setReadTimeout(30000);  
		HttpURLConnection.setFollowRedirects(true);
		httpConn.setDoOutput(true);
		httpConn.setRequestMethod("POST");
		httpConn.setRequestProperty("Content-Type", "text/xml");
		httpConn.connect();
		output = httpConn.getOutputStream();
		outr = new OutputStreamWriter(output);
		// 写入请求参数
		outr.write(inputParam.toString().toCharArray(), 0, inputParam.toString().length());
		outr.flush();
		outr.close();
		System.out.println("send ok");
		int code = httpConn.getResponseCode();
		System.out.println("code " + code);
		System.out.println(httpConn.getResponseMessage());
		
		//读取响应内容
		String sCurrentLine = ""; 
		String sTotalString = ""; 
		if (code == 200)
		{
		    java.io.InputStream is = httpConn.getInputStream();
		    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
		    while ((sCurrentLine = reader.readLine()) != null)
		        if (sCurrentLine.length() > 0)
		            sTotalString = sTotalString + sCurrentLine.trim();
		} else
		{
		    sTotalString = "远程服务器连接失败,错误代码:" + code;
		
		}
		System.out.println("response:" + sTotalString);
	}
}


Dubbo


...待续


Thrift


...待续


Rest


...待续


FTP


...待续

Java之旅--通讯

原文:http://blog.csdn.net/puma_dong/article/details/44547131

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!