1. 程式人生 > >java socket:客戶端與伺服器端通訊

java socket:客戶端與伺服器端通訊

Socket:網路上兩個程式通過一個雙向的通訊連線實現資料交換,連線的一段為一個socket,要實現兩個程式的資料交換一般要一對socket。 這個定義參考自百度百科,我覺得說的還不錯,另外,socket的英文有‘插口’的意思,其實也可以理解為程式的插口等等。 socket在實現程式通訊方面具有重要意義,我看到它出現在c/c++、java、python、c#等諸多語言中,看來學什麼語言都難逃此關。。 這裡我用了一個最簡單的socket客戶端與服務的通訊,對socket的基本過程做了初步的瞭解,在這裡記錄下程式碼,方便以後學習: 伺服器端:


import java.io.*;
import java.net.*;
import java.util.*;
public class sever {
	
	public void sever(){	
		try{
				//建立伺服器端的socket
				ServerSocket sk=new ServerSocket(12345);
				
				while(true){//伺服器無窮迴圈等待客戶端的請求	
					System.out.println("****伺服器已經啟動,等待客戶端連線...****");
					//accept()在等待客戶端連線上來前保持閒置,當客戶端連線上來,返回一個socket以便與客戶端通訊,ServerSocket與socket埠不同,以便ServerSocket空出來等待與其它使用者通訊
					Socket socket=sk.accept();
					//利用PrintWriter寫入流
					PrintWriter writer=new PrintWriter(socket.getOutputStream());
				    //在伺服器端由使用者鍵入字串
					System.out.println("input:");
					Scanner in = new Scanner(System.in);
					String s = in.nextLine();
					//寫入流
					writer.println(s);
					//關閉與socket的連線
					writer.close();				
				}
		}catch(Exception ex){
			ex.printStackTrace();		
		}		
	}
	public  static void main(String[] args){
		sever myserver=new sever();
		myserver.sever();		
	}
}

客戶端:

import java.io.*;
import java.net.*;
public class client {
	public void go(){
		try{
			//建立客戶端的socket,服務端的ip,客戶端連線的埠號
			Socket socket=new Socket("localhost",12345);
			//建立連線到socket的底層輸入串流			
			InputStreamReader streamreader=new InputStreamReader(socket.getInputStream());
			//建立BufferedReader讀取輸入串流
			BufferedReader reader=new BufferedReader(streamreader);
			//度取結果給字串
			String advice=reader.readLine();
			//客戶端顯示讀取的結果
			System.out.println(advice);
			//關閉BufferedReader
			reader.close();				
		}catch(Exception ex){
			ex.printStackTrace();		
		}			
	}
	public static void main(String[] args){
		client myclient=new client();
		myclient.go();
	}		
}

執行效果:在伺服器端輸入hello,客戶端接收並顯示: 在這裡插入圖片描述