JAVA網絡編程-IO之Socket


在繼續記錄NIO的學習之前,我覺得有必要先復習一下IO相關的知識。今天就說一下網絡套接字Socket

 

廢話不多說,先上代碼,這里實現一個最簡單的Echo功能,客戶端發送一條消息服務端直接進行返回。

服務端:

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

/**
 *  @Description:
 *  @author:xyq 
 *  @date:2018年6月6日
 */
public class Server {
	ServerSocket ss = null;
	
	public static void main(String[] args) {
		new Server().startServer();
	}
	public void startServer() {
		Socket socket = null;
		try {
			ss = new ServerSocket(1234); // 監聽1234端口
			while (true) {
				socket = ss.accept();   // 堵塞式接受Socket
				new ServerThread(socket).start();  // 放入線程進行處理
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	class ServerThread extends Thread {
		Socket socket = null;
		public ServerThread(Socket socket){
			this.socket = socket;
		}
		/* (non-Javadoc)
		 * @see java.lang.Runnable#run()
		 */
		@Override
		public void run() {
			BufferedReader br = null;
			PrintWriter pw = null;
			try {
				pw = new PrintWriter(socket.getOutputStream());
				br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				while (true) {
					String line = br.readLine();
					System.out.println("從客戶端來的信息:" + line);
					pw.println("你好,服務器已經收到您的信息!'" + line + "'\n");
					pw.flush();
					System.out.println("已經返回給客戶端!");
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					pw.close();
					br.close();
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				
			}
		}
		
	}
}

  

客戶端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 *  @Description:
 *  @author:xyq 
 *  @date:2018年6月6日
 */
public class Client {
	public static void main(String[] args) {
		new Client().startClient();
	}
	
	public void startClient() {
		Socket socket = null;
		BufferedReader br = null;
		PrintWriter pw = null;
		try {
			socket = new Socket("localhost", 1234);
			br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			pw = new PrintWriter(socket.getOutputStream());
			String get = "客戶端" + Math.random() * 1000;

			while (true) {
				if (get != null && get.length() > 0) {
					pw.println(get);   // 寫入緩沖流
					pw.flush();         // 刷新緩沖
				}
				if (br != null) {
					String line = br.readLine();
					System.out.println("從服務器來的信息:" + line);
				}
				
				Thread.sleep(2000);
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM