Java中的服務器與客戶端的簡單連接


     Java中重點之一就是服務器與客戶端的連接,因為是在同一台PC上,所以就設置服務器的地址為“localhost”,注意,我當時試着設置其他名稱,但都不行,這個原因還請老司機告一下。另外還要注意,服務端先於客戶端運行,廢話不多說,上代碼了

    

package com.myinfo;

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

public class Server {
	private static Socket accept;

	/**
	 * 服務器端的應用
	 * 
	 * @param args
	 */
	public static void main(String[] args) {

		try {
			// 1.創建Server服務器端的連接,並指定監聽端口號
			ServerSocket server = new ServerSocket(8008);
			// 2.建立accept()連接
			System.out.println("服務器即將連接,等待客戶端");
			Socket socket = server.accept();
			// 獲取客戶端輸入流
			InputStream is = socket.getInputStream();
			// 轉換成字符流
			InputStreamReader isr = new InputStreamReader(is);
			// 添加緩沖流
			BufferedReader br = new BufferedReader(isr);
		
			String data = null;
			while ((data = br.readLine()) != null) {
				// 循環讀取
				System.out.println("我是服務器端,客戶端說:" + data);
			}
              socket.shutdownInput();//關閉輸入流
			//注意,此時應先關閉輸入流之后才能獲取輸出流
			// 獲取服務器端的輸出流,響應客戶端
			OutputStream os = socket.getOutputStream();
			PrintWriter pw = new PrintWriter(os); // 包裝流
			pw.write("你好,客戶端");
            pw.flush();
           
            
            
			// 關閉可關閉的資源
			os.close();
			pw.close();
			
			is.close();
			isr.close();
			br.close();
			server.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

  接下來看客戶端

package com.myinfo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class Client {

	/**
	 * 客戶端
	 * 
	 * @param args
	 */

	public static void main(String[] args) {

		try {
			// 1.建立客戶端,輸入服務器的地址以及端口
			Socket socket = new Socket("localhost", 8008);
			// 獲取輸出流,向服務器打印信息
			OutputStream os = socket.getOutputStream();
			// 包裝成打印流
			PrintWriter pw = new PrintWriter(os);
			pw.write("用戶名:Admin 密碼:ck");
			pw.flush();
			socket.shutdownOutput(); //關閉輸出流
			//此時應該先關閉輸出流然后在開啟輸入流
			// 獲取客戶端的輸入流
			InputStream is = socket.getInputStream();
			// 轉換成字符流
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader rd = new BufferedReader(isr); // 轉換成緩沖流
			
			String data = null;
			while ((data = rd.readLine()) != null) {
				// 循環讀取
				System.out.println("我是客戶端,服務器端說:" + data);
			}

			// 關閉可關閉的資源
			rd.close();
			is.close();
			isr.close();
			pw.close();
			
			os.close();
			pw.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

      小白一枚,不足之處,望請指正


免責聲明!

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



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