python、java、socket通訊
阿新 • • 發佈:2019-02-03
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(); } } }