ServerSocket和Socket建立通訊(客戶端傳送訊息伺服器接收並返回到客戶端接收輸出)
阿新 • • 發佈:2019-01-28
需求:客戶端傳送訊息到伺服器,伺服器接收到訊息並讀取輸出,然後寫出到客戶端客戶端接收到輸出。
1、建立伺服器端
|-伺服器建立通訊ServerSocket
|-伺服器建立Socket接收客戶端連線
|-建立IO輸入流讀取客戶端傳送的資料
|-建立IO輸出流向客戶端傳送資料訊息
2、建立客戶端
|-建立Socket通訊,設定通訊伺服器的IP和Port
|-建立IO輸出流向伺服器傳送資料訊息
|-建立IO輸入流讀取伺服器傳送來的資料訊息
整個流程就是這樣。
伺服器端:
- package server.cotrol;
-
import
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- publicclass Server02 {
- publicstaticvoid main(String[] args) {
-
try
- ServerSocket ss = new ServerSocket(8888);
- System.out.println("啟動伺服器....");
- Socket s = ss.accept();
- System.out.println("客戶端:"+s.getInetAddress().getLocalHost()+"已連線到伺服器");
-
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
- //讀取客戶端傳送來的訊息
- String mess = br.readLine();
- System.out.println("客戶端:"+mess);
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
- bw.write(mess+"\n");
- bw.flush();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- package client.cotrol;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import java.net.Socket;
- import java.net.UnknownHostException;
- publicclass Client02 {
- publicstaticvoid main(String[] args) {
- try {
- Socket s = new Socket("127.0.0.1",8888);
- //構建IO
- InputStream is = s.getInputStream();
- OutputStream os = s.getOutputStream();
- BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
- //向伺服器端傳送一條訊息
- bw.write("測試客戶端和伺服器通訊,伺服器接收到訊息返回到客戶端\n");
- bw.flush();
- //讀取伺服器返回的訊息
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- String mess = br.readLine();
- System.out.println("伺服器:"+mess);
- } catch (UnknownHostException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }