基於tcp的socket通信(單個客戶端與服務端)

//先啓動服務端,創建8888端口號(一般採用系統1023之後的),監聽,如果存在通信返回socket,獲得該socket字節流,轉化爲字符流並用bufferedreader緩衝,隨後打印出服務端接收到的信息,同時回覆客戶端信息,最後關閉資源。

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 {
public static void main(String []args){
	
	try {
		//1創建一個服務器端socket,即serversocket
		ServerSocket serversocket=new ServerSocket(8888);
		//2,調用accept的方法進行監聽,這邊會阻塞
		Socket socket=serversocket.accept();
		InputStream is=socket.getInputStream();//獲得字節流
		BufferedReader br=new BufferedReader(new InputStreamReader(is));//字節流轉化爲字符流並添加緩衝
		String info=null;
		while((info=br.readLine())!=null){
			System.out.println("我是服務端,客戶端說:"+info);
		}
		socket.shutdownInput();//必須要及時關閉,因爲readline這個方法是以\r\n作爲界定符的,由於發送消息的那一端用的是PrintWriter的write()方法,這個方法並沒加上\r\n,所以會一直等待
		//回覆客戶端
		OutputStream os=socket.getOutputStream();
		PrintWriter pw=new PrintWriter(os);
		pw.write("歡迎您!");
		pw.flush();
		pw.close();
		os.close();
		br.close();
		is.close();//關閉返回的 InputStream 將關閉關聯套接字。 
        socket.close();
		serversocket.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
}
}
//再啓動客戶端,需要給定訪問的ip地址和端口號,然後寫入信息,並接受服務端信息(這部分與上面正好顛倒),最後關閉資源。

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;
import java.net.UnknownHostException;



//基於tcp協議的socket通信,客戶端
public class client {
	public static void main(String[] args) {
		try {
			Socket socket=new Socket("127.0.0.1",8888);//創建客戶端socket,因爲是本地,ip地址就是127.0.0.1
			OutputStream os=socket.getOutputStream();
			PrintWriter pw=new PrintWriter(os);
			pw.write("用戶名:admin;密碼:123");
			pw.flush();
			socket.shutdownOutput();//必須加上這句話,表示輸出流的結束,注意此時不能關閉os,因爲關閉os會關閉綁定的socket
			//在客戶端獲取迴應信息
			InputStream is=socket.getInputStream();
			BufferedReader br=new BufferedReader(new InputStreamReader(is));
			String info=null;
			while((info=br.readLine())!=null){
				System.out.println("我是客戶端,服務端說:"+info);
			}
			br.close();
			is.close();
			pw.close();
			os.close();
			socket.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章