Socket 簡單實現服務器和客戶端

首先這只是簡單的 socket

直接代碼:服務器代碼

package SocKet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;


public class Server {
	

	private ServerSocket ss;
	
	private InputStreamReader inputStreamReader; 
	
	private BufferedReader bufferedReader;
	
	public void server(){

		try {
			//<span style="color:#FF6666;">讓服務器端程序開始監聽來自9000端口的客戶端請求</span><span style="color:#3333FF;">端口號是我隨便寫的 ,沒被佔用即可。我也不太清楚怎麼檢測端口號,會的希望留言</span>。
			if (ss==null) {
				 ss = new ServerSocket(9000);
				 System.out.println("服務器啓動...");
			}
			
			//服務器無窮的循環等待客戶端的請求
			while(true){	
			/*
			 *accept()方法會在等待用戶的socket連接時閒置着,當用戶鏈接
			 *上來時,此方法會返回一個socket(在不同的端口上)以便與客戶端
			 *通信。Socket與ServerSocket的端口不同,因此ServerSocket可以
			 *空閒出來等待其他客戶端
			 */
			//這個方法會停下來等待要求到達之後再繼續
			Socket s = ss.accept();
			
			inputStreamReader = new InputStreamReader(s.getInputStream());
			bufferedReader = new BufferedReader(inputStreamReader);
			
			String request = bufferedReader.readLine();
            
			System.out.println("接收到了客戶端的請求:"+request);
			//PrintWriter printWriter = new PrintWriter(s.getOutputStream());
                        //<span style="color:#3333FF;">同樣解決亂碼問題</span> 
 <span style="color:#FF0000;">                       PrintWriter output = new PrintWriter(new OutputStreamWriter(s.getOutputStream(),"UTF-8"),true);</span>
			String advice = "在哪呢?";
			output.println(advice);
			output.close();
			
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}
	
	public static void main(String[] args) {
		Server server = new Server();
		server.server();
	}
	
	
}


客戶端代碼:
package SocKet;

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

public class Scoket {

	 public void go() throws UnknownHostException, IOException
	 {
		 //獲得地址/端口
		 Socket socket=new Socket("127.0.0.1", 9000);
		 //客戶端獲得的數據發送到服務器
		 PrintWriter printwrite=new PrintWriter(socket.getOutputStream());
		 System.out.println("正在建立連接....");
		 
		 //printwrite.println("sdfsdf");
		 printwrite.println("我的家鄉");
		 printwrite.flush();
		 //客戶端接收數據時設置編碼方式:<span style="color:#33CC00;">可以解決亂碼問題</span>
		<span style="color:#FF0000;"> InputStreamReader isr=new InputStreamReader(socket.getInputStream(),"UTF-8");</span>
		 
		// BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));

		 BufferedReader bf=new BufferedReader(isr);
		 String news=bf.readLine();
		 System.out.println("服務器的得到的數據是:--"+news);
		 bf.close(); 
	 }
	 public static void main(String[]args) throws UnknownHostException,IOException
	 {
		 Scoket s=new Scoket();
		 s.go();
	 }
}
是用步驟:我是在自己的 本機上測試的;工具就是eclipse

首先創建兩個類 :server.java 和 Scoket.java代碼如上

先運行 Server類  運行服務器 控制檯顯示如下:


接着 運行 Scoket.java 注意什麼也不要做 直接切換到Scoket.java類中運行

服務器顯示如下:


客戶端控制檯顯示如下:


在控制檯上可以切換顯示不同類的控制,也就是eclipse 同時在運行着兩個類

切換如下:


點擊控制檯這個按鈕即可。

發佈了23 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章