1. 程式人生 > >python、java、socket通訊

python、java、socket通訊

package server.client;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

public class Client {
	
	public static List readFiles(String path) throws IOException{
		FileInputStream fis = new FileInputStream(path); 
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); 
        BufferedReader br = new BufferedReader(isr); 
		
        List document = new ArrayList();
        List article = new ArrayList();
        
        String line = null;
        int index = 0;
		while((line = br.readLine()) != null) {
			article.add(line.trim());
			index += 1;
			if (index % 2 == 0){
				document.add(new ArrayList(article));
				article.clear();
			}
		}
		return document;
	}
	
	public static void main(String args[]) throws Exception {
		   //為了簡單起見,所有的異常都直接往外拋
		String host = "101.200.146.57";  //要連線的服務端IP地址
		int port = 10086;   //要連線的服務端對應的監聽埠
		   //與服務端建立連線
		Socket client = new Socket(host, port);
		   //建立連線後就可以往服務端寫資料了
		ObjectOutputStream writer = new ObjectOutputStream(client.getOutputStream());
	    
		
		System.out.println(new Date());
		List relDoc = readFiles("file//relatedDoc.txt");
		List unrelDoc = readFiles("file//unrelatedDoc.txt");
		List needDealDoc = readFiles("file//dealDoc.txt");
		
		HashMap<String,List> map= new HashMap<String,List>();
//		System.out.println("this is Clent");
		
		map.put("relDoc", relDoc);
	        map.put("unrelDoc", unrelDoc);
	        map.put("needDealDoc", needDealDoc);
	    
		writer.writeObject(map);
		writer.flush();
		
		ObjectInputStream br = new ObjectInputStream(new BufferedInputStream(client.getInputStream()));
		List similarityList = (List) br.readObject();
		
		System.out.println(similarityList);
		System.out.println(new Date());
		writer.close();
		br.close();
		
	}
	
}

2、Server端

package server.client;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.List;
import text.sort.*;
public class Server {
	
	public static void main(String args[]) throws IOException {
	      //為了簡單起見,所有的異常資訊都往外拋
		int port = 10086;
	      //定義一個ServerSocket監聽在埠8899上
	    ServerSocket server = new ServerSocket(port);
//	    server.setReceiveBufferSize(20480000);
	    
	    while (true) {
	         //server嘗試接收其他Socket的連線請求,server的accept方法是阻塞式的
	    	Socket socket = server.accept();
	         //每接收到一個Socket就建立一個新的執行緒來處理它
	        new Thread(new Task(socket)).start();
	    }
	}   
	   /**
	    * 用來處理Socket請求的
	   */
	public static class Task implements Runnable {
	 
		public Socket socket;
	      
	    public Task(Socket socket) {
	    	this.socket = socket;
	    }
	      
	    public void run() {
	    	try {
	    		handleSocket();
	        }
	    	catch (Exception e) {
	            e.printStackTrace();
	        }
	    } 
	      /**
	       * 跟客戶端Socket進行通訊 * @throws Exception
	       */
	    public void handleSocket() throws Exception {
	    	 ObjectInputStream br = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));
	    	 ObjectOutputStream writer = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
	    	 
	         HashMap map = (HashMap) br.readObject();
	         List list = (List)map.get("test");
	         List relDoc = (List)map.get("relDoc");
	         List unrelDoc = (List)map.get("unrelDoc");
	         List needDealDoc = (List)map.get("needDealDoc");
	         //讀完後寫一句
         
	         List similarityList = VecSpaModel.VSMStart( relDoc, unrelDoc, needDealDoc);

	         
//	         System.out.println(similarityList.size());
	         writer.writeObject(similarityList);
	         writer.flush();
	         writer.close();
	         br.close();
	         socket.close();
	   }
   }
	
}