Java Echo Server

Java Echo Server เป็นตัวอย่างง่ายๆ ที่ server จะรับข้อความจาก client และทำการเก็บและนับข้อความ หลังจากนั้นจะตอบข้อความกลับ โดยที่จะรับและแสดงข้อความตอบกลับไปเรื่อยๆจนกว่าจะพิมพ์ข้อความว่า protocol for this service is
“***CLOSE***” ถึงจะทำการปิดการเชื่อมต่อ ในโปรแกรมนี้อาจมีข้อผิดพลาดในการรับและส่งข้อความดังนั้นจึงต้องมี try catch IOException เพื่อทำงานในกรณีที่ผิดพลาดหลังจากนั้นก็จะต้องมี final เพื่อที่ไม่ว่ากรณีใดก็ตามจะต้องปิดการเชื่อมต่อหลังทำงานเสร็จสิ้นเพื่อที่ จะได้ไม่ค้างการเชื่อมต่อไว้ ซึ่งในการเชื่อมต่อระหว่าง server กับ client จะเชื่อมต่อผ่าน socket และ server จะต้องทำงานซ้ำตลอดจึงต้องมี loop infinite เพื่อที่จะได้ให้บริการ client ตลอดเวลา โดยที่ทำการสร้าง method handleClient เพื่อจัดการให้บริการ client ที่เข้ามาใช้บริการ ดังโค้ดตัวอย่างบ้างส่วน

[sourcecode language="java"]
do{
handleClient();
}while (true);
[/sourcecode]

นี้เป็นโค้ดในส่วนของการทำซ้ำที่จะทำไปเรื่อยจนกว่าจะ บริการเครื่อง client เสร็จสิ้น และโปรแกรมตัวอย่างนี้จะให้บริการผ่าน port 1234
โค้ดของ program TCPEchoServer
[sourcecode language="java"]

//Server that echoes back client's messages.
//At end of dialogue, sends message indicating number of
//messages received. Uses TCP.
import java.io.*;
import java.net.*;
import java.util.*;
public class TCPEchoServer
{
private static ServerSocket servSock;
private static final int PORT = 1234;
public static void main(String[] args){
System.out.println("Opening port...\n");
try
{
servSock = new ServerSocket(PORT); //Step 1.
}
catch(IOException ioEx)
{
System.out.println("Unable to attach to port!");
System.exit(1);
}
do{
handleClient();
}while (true);
}

private static void handleClient()
{
Socket link = null; //Step 2.
try
{
link = servSock.accept(); //Step 2.
Scanner input = new Scanner(link.getInputStream());//Step 3.
PrintWriter output = new PrintWriter(link.getOutputStream(),true); //Step3.
int numMessages = 0;
String message = input.nextLine(); //Step 4.
while (!message.equals("***CLOSE***"))
{
System.out.println("Message received.");
numMessages++;
output.println("Message " + numMessages + ": " + message); //Step 4.
message = input.nextLine();
}
output.println(numMessages + " messages received.");//Step 4.
}
catch(IOException ioEx)
{
ioEx.printStackTrace();
}
finally
{
try
{
System.out.println("\n* Closing connection... *");
link.close(); //Step 5.
}
catch(IOException ioEx)
{
System.out.println("Unable to disconnect!");
System.exit(1);
}
}
}
}
[/sourcecode]
ขั้นตอนในการทำงานมี 4 ขั้นตอน
1. สร้างการเชื่อมต่อของ server

เราได้สร้าง Socket object โดยใช้ค่า  arguments 2 ค่า นั้นคือ

? IP server (ชนิดแบบ InetAddress);

? หมายเลข port ที่ให้บริการ

ดังโค้ดนี้

Socket link = new Socket(InetAddress.getLocalHost(),1234);

2.กำหนด input และ output stream

ในการกำหนด ก็เหมือนกับบทความที่แล้วคือ getInputStream และ getOutputStream

3. รับและส่งข้อมูล

โดยการใช้ object ของ Scanner ในการอ่านและรับข้อมูล ส่วนการส่งข้อมูลนั้นใช้ PrintWriter

4. ปิดการเชื่อมต่อโดย close Socket

สามารถลองทดสอบรันโปรแกรมแล้ว ใช้เมนู run คำสั่ง cmd เพื่อ telnet 127.0.0.1 1234 แล้วพิมข้อความที่ต้องการ

Leave a Reply

Your email address will not be published. Required fields are marked *