Java Socket程式設計系列(二)開發帶回聲功能的Server和Client
伺服器端:
package com.dylan.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 將來自客戶端的資訊加工一下送回去
*
* @author xusucheng
* @create 2017-12-21
**/
public class EchoServer {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(20011);
//服務端在20011埠監聽客戶端請求的TCP連線
Socket client = null;
boolean f = true;
while (f) {
client = server.accept();
//服務端在呼叫accept()等待客戶端的連線請求時會阻塞,直到收到客戶端傳送的連線請求才會繼續往下執行程式碼
//連結成功後為每個客戶端連線開始做出處理
try {
PrintStream out = new PrintStream(client.getOutputStream());
//獲取Socket的輸出流,用來向客戶端傳送資料
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
//獲取Socket的輸入流,用來接收從客戶端傳送過來的資料
boolean flag = true;
while (flag) {
String str = buf.readLine();
//接收從客戶端傳送過來的資料
if (str == null || "".equals(str)) {
flag = false;
} else {
if ("bye".equals(str)) {
flag = false;
} else {
//將接收到的字串前面加上echo,傳送到對應的客戶端
out.println("echo:" + str);
}
}
}
out.close();
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
server.close();
}
}
客戶端:
package com.dylan.socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketTimeoutException;
/**
* 客戶端
*
* @author xusucheng
* @create 2017-12-23
**/
public class EchoClient {
public static void main(String[] args) throws Exception {
Socket client = new Socket("127.0.0.1", 20011);
//客戶端請求與本機在20011埠建立TCP連線
client.setSoTimeout(10000);
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
//獲取鍵盤輸入
PrintStream out = new PrintStream(client.getOutputStream());
//獲取Socket的輸出流,用來傳送資料到服務端
BufferedReader buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
//獲取Socket的輸入流,用來接收從服務端傳送過來的資料
boolean flag = true;
while (flag) {
System.out.println("輸入資訊:");
String str = input.readLine();
out.println(str);
//傳送資料到服務端
if ("bye".equals(str)) {
flag = false;
} else {
try {
//從伺服器端接收資料有個時間限制(系統自設,也可以自己設定),超過了這個時間,便會丟擲該異常
String echo = buf.readLine();
System.out.println(echo);
} catch (SocketTimeoutException e) {
System.out.println("Time out, No response");
}
}
}
input.close();
if (client != null) {
//如果建構函式建立起了連線,則關閉套接字,如果沒有建立起連線,自然不用關閉
client.close(); //只關閉socket,其關聯的輸入輸出流也會被關閉
}
}
}
相關文章
- Java Socket程式設計系列(一)開發一次性會話的Server和ClientJava程式設計會話Serverclient
- Java Socket程式設計系列(四)開發支援多客戶端訪問的ServerJava程式設計客戶端Server
- Java Socket程式設計系列(三)開發支援單客戶端訪問的ServerJava程式設計客戶端Server
- 《初識TCP》iOS、macOS實現socket client與socket serverTCPiOSMacclientServer
- socket.io client + socketio-netty server簡析clientNettyServer
- 完善的Socket Server程式 (轉)Server
- java併發程式設計系列:牛逼的AQS(下)Java程式設計AQS
- java併發程式設計系列:牛逼的AQS(上)Java程式設計AQS
- java併發程式設計系列:java併發程式設計背景知識Java程式設計
- 用java開發的有聲圍棋解說程式Java
- Linux CVS Server + jCVS-5.3.2 Client分散式開發(二) (轉)LinuxServerclient分散式
- socket實現聊天功能(二)
- Java併發程式設計系列之Semaphore詳解Java程式設計
- 一週試用yii開發一個帶各種該有功能的web程式(二)Web
- Java 在Client/Server 中應用JavaclientServer
- java併發程式設計系列:wait/notify機制Java程式設計AI
- python3:利用socket建立的一個簡單的聊天client端和server端例項PythonclientServer
- Oracle閃回技術 概覽 應用程式開發功能Oracle
- Aveva Marine VBNET 程式設計系列-搭建開發框架程式設計框架
- 元件化開發-建立功能級別的元件-順帶求賢-高階Java開發元件化Java
- java Socket Tcp 瀏覽器和伺服器(二)JavaTCP瀏覽器伺服器
- PHP回顧之socket程式設計PHP程式設計
- Java在Client/Server網路中的應用 (轉)JavaclientServer
- mysql原碼安裝(server和client)MySqlServerclient
- 《Client-Server Web Apps with JavaScript and Java》選讀:什麼是Client-Server Web App?clientServerWebAPPJavaScript
- Socket Server的N種併發模型彙總Server模型
- Socket Server 的 N 種併發模型彙總Server模型
- 「小程式JAVA實戰」小程式的影片點贊功能開發(62)Java
- 企業招聘小程式開發的功能和價值
- java的跨開發語言功能Java
- Java Socket程式設計Java程式設計
- Java Socket程式設計Java程式設計
- Java併發程式設計系列文章目錄帖及原始碼Java程式設計原始碼
- 對Swoole、Workerman和php自帶的socket的理解PHP
- 帶你玩轉小程式開發實踐|含直播回顧視訊
- java併發程式設計系列原理篇--JDK中的通訊工具類SemaphoreJava程式設計JDK
- java的socket程式設計問題Java程式設計
- 和朱曄一起復習Java併發(二):佇列Java佇列