thuc hanh tcp_udp socket

5
BÀI THC HÀNH LT MNG CƠ BN GV: TS. Hunh Công Pháp Khoa CNTT, ĐH Bách Khoa, ĐH Đà Nng Mi sinh viên thc hin tt ccác bài dưới đây. Sau đó to 01 tp .doc: có tên gm Htênsv_lp.doc có ni dung gm mã lnh và màn hình kết qu(được chp) dán ngay bên dưới các bài tp. Tt ccác bài làm sđược np li sau bui thc hành. Thc hành TCP Socket 1. Chy chương trình sau: a. Server import java.io.DataOutputStream; import java.net.*; import java.util.Date; public class TimeServer { public static void main(String[] args) throws Exception { ServerSocket server = new ServerSocket(7000); System.out.println("Server is started"); while(true) { Socket socket = server.accept(); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); String time = new Date().toString(); dos.writeUTF("Server tra lai ngay gio="+time); socket.close(); } } } b. Client import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.Socket; public class TimeClient { public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 7000); DataInputStream din = new DataInputStream(socket.getInputStream()); String time = din.readUTF(); System.out.println(time); } }

Upload: nam-tran-xuan

Post on 19-Jan-2016

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Thuc Hanh TCP_UDP Socket

BÀI THỰC HÀNH LT MẠNG CƠ BẢN GV: TS. Huỳnh Công Pháp

Khoa CNTT, ĐH Bách Khoa, ĐH Đà Nẵng Mỗi sinh viên thực hiện tất cả các bài dưới đây.

Sau đó tạo 01 tệp .doc:

• có tên gồm Họtênsv_lớp.doc

• có nội dung gồm mã lệnh và màn hình kết quả (được chụp) dán ngay bên dưới các bài tập.

Tất cả các bài làm sẽ được nộp lại sau buổi thực hành.

Thực hành TCP Socket

1. Chạy chương trình sau:

a. Server

import java.io.DataOutputStream; import java.net.*; import java.util.Date; public class TimeServer { public static void main(String[] args) throws Exception { ServerSocket server = new ServerSocket(7000); System.out.println("Server is started"); while(true) { Socket socket = server.accept(); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); String time = new Date().toString(); dos.writeUTF("Server tra lai ngay gio="+time); socket.close(); } }

}

b. Client import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.Socket; public class TimeClient { public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 7000); DataInputStream din = new DataInputStream(socket.getInputStream()); String time = din.readUTF(); System.out.println(time); }

}

Page 2: Thuc Hanh TCP_UDP Socket

2. Thay đổi chương trình ở bài 1 sao cho cứ mỗi giây chương trình Server trả về cho client thời gian mới. Chương trình Server có khả năng phục vụ nhiều client (chương trình Multi-threading).

3. Từ chương trình trên tạo một đồng hồ điện tử phía client và cho phép người dùng chọn thành phố. Thời gian cập nhật được gửi về từ Server sau mỗi giây (chương trình Multi-threading).

4. Chạy chương trình sau:

a. Server import java.io.*; import java.util.*; import java.net.*; /*Chuong trinh chat don gian Server nhan message tu Client */ public class SimpleChatServer { public static void main(String[] args) throws Exception { ServerSocket server = new ServerSocket(7000); System.out.println("Server is started"); Socket socket = server.accept(); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); DataInputStream din = new DataInputStream(socket.getInputStream()); //nhap chuoi de gui den client Scanner kb = new Scanner(System.in); while(true) { //nhan du lieu tu client String st = din.readUTF(); System.out.println(st); System.out.print("Server: "); String msg=kb.nextLine(); dos.writeUTF("Server: "+msg); dos.flush(); kb=kb.reset(); } //socket.close(); } }

b. Client import java.io.DataInputStream;

Page 3: Thuc Hanh TCP_UDP Socket

import java.io.DataOutputStream; import java.net.Socket; import java.util.*; /*Chuong trinh chat don gian *Cient nhan chuoi tu ban phim gui den server *Nhan du lieu tu server */ public class SimpleChatClient { public static void main(String[] args) throws Exception { Socket socket = new Socket("localhost", 7000); DataInputStream din = new DataInputStream(socket.getInputStream()); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); //nhap chuoi de gui den sever Scanner kb = new Scanner(System.in); while(true) { System.out.print("Client: "); String msg=kb.nextLine(); dos.writeUTF("Client: "+msg); dos.flush(); //nhan du lieu tu server String st = din.readUTF(); System.out.println(st); kb = kb.reset(); } }

}

5. Dựa vào bài 4, viết chương trình client cho phép người dùng nhập vào 2 số thực và một phép toán (+, -, *, /) rồi gửi đến chương trình Server. Chương trình Server thực hiện tính toán kết quả dựa vào phép toán tương ứng và trả kết quả cho chương trình Client. Mỗi lần tính toán được, server đều lưu kết quả xuống CSDL.

6. Viết chương trình chat cho phép các client gửi dữ liệu nhập từ bàn phím qua lại. (Sử dụng Multi-threading).

7. Phát triển bài 6, chương trình server có kết nối CSDL để quản lý accounts người dùng.

Page 4: Thuc Hanh TCP_UDP Socket

Thực hành UDP Socket

1. Chạy chương trình sau:

a. Server

import java.io.*; import java.net.*; import java.util.*; class UDPTimeServer { public static void main(String args[]) throws Exception { //Gan cong 9876 cho chuong trinh DatagramSocket serverSocket = new DatagramSocket(9876); //Tao cac mang byte de chua dl gui va nhan System.out.println("Server is started"); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { //Tao goi rong de nhan du lieu tu client DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); //Nhan dl tu client serverSocket.receive(receivePacket); //Lay dia chi IP cua may client InetAddress IPAddress = receivePacket.getAddress(); //Lay port cua chuong trinh client int port = receivePacket.getPort(); //Lay ngay gio de gui nguoc lai client String request = new String(receivePacket.getData()); System.out.println(request); if(request.trim().equals("getDate")) sendData = new Date().toString().getBytes(); else sendData = "Server not know what you want?".getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); //Gui dl lai cho client serverSocket.send(sendPacket); } } }

b. Client import java.io.*; import java.net.*; class UDPTimeClient { public static void main(String args[]) throws Exception { DatagramSocket clientSocket = new DatagramSocket();//gan cong dong InetAddress IPAddress = InetAddress.getByName("localhost"); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024];

Page 5: Thuc Hanh TCP_UDP Socket

sendData = "getDate".getBytes(); //tao datagram co noi dung yeu cau loai dl de gui cho server DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket);//gui dl cho server //tao datagram rong de nhan dl DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket);//nhan dl tu server String str= new String(receivePacket.getData());//lay dl tu packet nhan duoc System.out.println(str); clientSocket.close(); } }

2. Thay đổi chương trình ở bài 1 sao cho cứ mỗi giây chương trình Server trả về cho client thời gian mới

3. Thay đổi chương trình ở bài 1, cho phép người dùng nhập vào loại yêu cầu (Day, Month, Year, Hour, Minute, Second), dựa vào loại yêu cầu Server trả về cho client thời gian mới

4. Từ chương trình trên tạo một đồng hồ điện tử phía client. Thời gian cập nhật được gửi về từ Server sau mỗi giây.

5. Nâng cấp bài 4 cho phép người dùng chọn thành phố (New York, Hanoi, Tokyo, Paris, Jakarta, Seoul).

6. Dựa vào bài 4 trong bài thực hành TCP, viết chương trình client cho phép người dùng nhập vào 2 số thực và một phép toán (+, -, *, /) rồi gửi đến chương trình Server. Chương trình Server thực hiện tính toán kết quả dựa vào phép toán tương ứng và trả kết quả cho chương trình Client.

7. Viết chương trình chat UDP cho phép các client gửi dữ liệu nhập từ bàn phím qua lại. Chương trình server có kết nối CSDL để quản lý accounts người dùng.