Đề bài: Tạo ra hai ứng dụng độc lập (một client và một server). Client chấp nhận một trong các số sau: 1, 2, 3. Số này sẽ được gửi đến server. Server sẽ trả lại tương ứng : “ONE” hoặc “TWO” hoặc “THREE” (tùy theo số nhận được). Dùng giao thức TCP/IP
- Client gửi số bất kì đến SERVER
- Nếu là số 1,2,3 thì trả về ONE,TWO,THREE, các trường hợp còn lại trả về UNKNOWN
- SERVER mở cổng để client truy xuất đến
- Tạo các luồng nhập xuất khi có client truy cập đến (cả client và SERVER), lúc này client và server có thể gửi thông tin qua lại lẫn nhau
- Client truy cập vào, sau đó gửi thông tin đến server
- Server nhận được thông tin, rồi xử lí, sau đó gửi trả lại client
- Client hiển thị thông tin mà server đã trả về
Các lớp và chức năng các lớp:
- Lớp này có phương thức go(), chức năng của nó:
o Mở cổng của server, tạo kết nối mỗi khi có client kết nối
o Chờ nhận dữ liệu từ Client gửi lên
- Phương thức main của lớp này tạo ra đối tượng thuộc lớp NumberTCPSimpleServer, sau đó gọi phương thức go() của lớp này
- Phương thức khởi tạo của lớp này có đối số là chuỗi về địa chỉ của server
o Tạo kết nối đến địa chỉ và số hiệu cổng của server
o Tạo các luồng nhập xuất liên kết với server
o Đưa dữ liệu cần gửi hoặc nhận vào các luồng này
o Nhận dữ liệu (sau khi server đã xử lí) rồi hiển thị lên màn hình
Client
import java.io.*;
import java.net.*;
class NumberTCPSimpleServer{
private ServerSocket sSoc;
public static final int PORT = 8000;public static void main(String args[]){
NumberTCPSimpleServer server = new NumberTCPSimpleServer();
try {
server.go();
}
catch(IOException e){
e.printStackTrace(); }
catch(ClassNotFoundException e){
e.printStackTrace(); }
}
public void go() throws IOException, ClassNotFoundException{
Socket soc = null;
sSoc = new ServerSocket(PORT);
while(true)
{
//creating a Socket
System.out.println("Server is waitting...");
soc = sSoc.accept();
System.out.println("A Socket was instantiated");
//creating an OutputStream object
OutputStream os = soc.getOutputStream();
//creating an ObjectOutputStream object
ObjectOutputStream oos = new ObjectOutputStream(os);
//creating an InputStream object
InputStream is = soc.getInputStream();
//creating an ObjectOutputStream object
ObjectInputStream ois = new ObjectInputStream(is);
String received = (String)ois.readObject();
String returned = null;
if(received.equals("1")){
returned = "ONE";
}
else{
if(received.equals("2")){
returned = "TWO"; }
else{
if(received.equals("3")) {
returned = "THREE"; }
else
{
returned = "UNKNOWN"; }
}
}
oos.writeObject(returned);
ois.close();
oos.close();
soc.close();
}
}
}
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
//import java.util.Scanner;
class NumberTCPSimpleClient{
public static final int DT_PORT = 8000;
String hostName;
Socket soc;
public static void main(String args[]){
NumberTCPSimpleClient client = new NumberTCPSimpleClient("localhost");
try{
//System.out.print("run: ");
//Scanner input =new Scanner(System.in);
//String i = input.nextLine();
//sendData = i.getBytes();
//client.go(i);
client.go("1");
client.go("2");
client.go("3");
client.go("4");
}
catch(IOException e){
e.printStackTrace();
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
}
public NumberTCPSimpleClient(String hostString){
this.hostName = hostString;
}
public void go(String str) throws IOException, ClassNotFoundException{
soc = new Socket(hostName, DT_PORT);
//creating an InputStream that will be connected to soc
InputStream is = soc.getInputStream();
//creating ObjectInputStream
ObjectInputStream ois = new ObjectInputStream(is);
//creating an OutputStream that will be connected to soc
OutputStream os = soc.getOutputStream();
//creating ObjectOutputStream
ObjectOutputStream oos = new ObjectOutputStream(os);
//sending data to server
oos.writeObject(str);
System.out.println(str+" was sent");
//receiving data from server
String temp = (String)ois.readObject();
System.out.println(temp + " was received");
oos.close();
ois.close();
soc.close();
}
}