從0開始 1.telnet伺服器 - MUD Game
By Tom
at 2019-12-03T16:32
at 2019-12-03T16:32
Table of Contents
仔細探究 MUD 的本質, 會發現 MUD 其實就是一個『附加遊戲功能的 telnet
聊天室』, 故打造一個 talnet 聊天室就是一切的開始.
用 java 建立 telnet server 可以說是非常的簡單, java 標準程式庫
已經把需要的東西都準備好了, 我們只需要在程式中呼叫 ServerSocket
這個 class, 並使用 ServerSocket 的 accpet() 就可以取得 Socket
也就是與客戶端的連線物件. 接著再呼叫 Socket 的 getInputStream()
與 getOutputStream() 取得 InputStream 與 OutputStream,
就可以使用這兩個 Stream 與客戶端進行純文字的溝通了.
以下就是最基本的 echo server.
// ✂--------------請沿虛線剪下--------------
package service;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ChatServer {
static final int PORT = 4000;
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(PORT)) {
System.out.println("Server is listening port: " + PORT);
while (true) {
Socket socket = server.accept();
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
out.println("歡迎來到 telnet echo server!");
String input;
while ((input = in.readLine()) != null) {
if ("quit".equalsIgnoreCase(input)) {
out.println("Bye! 歡迎下次再來");
socket.close();
break;
}
out.println("Echo: " + input);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// ✂--------------請沿虛線剪下--------------
以上的程式如果編譯並執行的話, 試著用任何一個 talnet 連線軟體連線
到 127.0.0.1:4000 就會看到以下畫面.
https://imgur.com/LyESEbU
server 會像是鸚鵡學舌一樣把你輸入的文字原封不動的還給你, 不過目前
我們的 server 只能服務一個人, 如果你試圖再開一個連線程式, 會發現
要等第一次的連線結束後第二個連線才能連上, 那是因為我們的 server
目前還不具備多執行緒(multi-thread)的能力, 所以一次只能服務一個連
線. 關於多執行緒的作法, 敬請期待下回連載.
--
╔═◢ ◣═╦╦═════╦═════╗
║ ◤◤◤ ◥ ╠╣飛鳥ももこ╠═╗ ║
║ ▇ ▇ ║╚═════╝ ╚═╦═╣
║ ▌ ● ● ▌ ║╔══════╗╔═╩═╣
║◤ ◥ ︺█◤ ◥╠╣Momoko Asuka╠╝ ║
╚◣◢ ▄▂▄ ◣◢╩╩══════╩════╝
--
聊天室』, 故打造一個 talnet 聊天室就是一切的開始.
用 java 建立 telnet server 可以說是非常的簡單, java 標準程式庫
已經把需要的東西都準備好了, 我們只需要在程式中呼叫 ServerSocket
這個 class, 並使用 ServerSocket 的 accpet() 就可以取得 Socket
也就是與客戶端的連線物件. 接著再呼叫 Socket 的 getInputStream()
與 getOutputStream() 取得 InputStream 與 OutputStream,
就可以使用這兩個 Stream 與客戶端進行純文字的溝通了.
以下就是最基本的 echo server.
// ✂--------------請沿虛線剪下--------------
package service;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ChatServer {
static final int PORT = 4000;
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(PORT)) {
System.out.println("Server is listening port: " + PORT);
while (true) {
Socket socket = server.accept();
BufferedReader in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
PrintStream out = new PrintStream(socket.getOutputStream());
out.println("歡迎來到 telnet echo server!");
String input;
while ((input = in.readLine()) != null) {
if ("quit".equalsIgnoreCase(input)) {
out.println("Bye! 歡迎下次再來");
socket.close();
break;
}
out.println("Echo: " + input);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// ✂--------------請沿虛線剪下--------------
以上的程式如果編譯並執行的話, 試著用任何一個 talnet 連線軟體連線
到 127.0.0.1:4000 就會看到以下畫面.
https://imgur.com/LyESEbU
server 會像是鸚鵡學舌一樣把你輸入的文字原封不動的還給你, 不過目前
我們的 server 只能服務一個人, 如果你試圖再開一個連線程式, 會發現
要等第一次的連線結束後第二個連線才能連上, 那是因為我們的 server
目前還不具備多執行緒(multi-thread)的能力, 所以一次只能服務一個連
線. 關於多執行緒的作法, 敬請期待下回連載.
--
╔═◢ ◣═╦╦═════╦═════╗
║ ◤◤◤ ◥ ╠╣飛鳥ももこ╠═╗ ║
║ ▇ ▇ ║╚═════╝ ╚═╦═╣
║ ▌ ● ● ▌ ║╔══════╗╔═╩═╣
║◤ ◥ ︺█◤ ◥╠╣Momoko Asuka╠╝ ║
╚◣◢ ▄▂▄ ◣◢╩╩══════╩════╝
--
Tags:
線上
All Comments
By Frederica
at 2019-12-05T20:08
at 2019-12-05T20:08
Related Posts
從0開始的MUD開發日記 0.前言
By Olive
at 2019-12-03T16:25
at 2019-12-03T16:25
T1宣布成立OW戰隊 將參加明年韓國OC
By Madame
at 2019-12-03T16:03
at 2019-12-03T16:03
是因為甚麼退坑的?
By Mary
at 2019-12-03T15:48
at 2019-12-03T15:48
淨化龜龜/死神團
By Yuri
at 2019-12-03T15:39
at 2019-12-03T15:39
來聊聊主力戰艦吧?
By Skylar DavisLinda
at 2019-12-03T14:45
at 2019-12-03T14:45