13
Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221 TÀI LIỆU ÔN TẬP LẬP TRÌNH MẠNG Phần I : Kết Nối Bằng TCP/IP Bước 1 : Khai báo các thông số kết nối cho Server (Server.Java) ServerSocket server=new ServerSocket(8080); //có thể thay đổi số cổng 8080 thành cổng khác Bước 2 : Khởi động client để kết nối đến Server (Client.Java) Socket server=new Socket("127.0.0.1",8080); //có thể thay đổi IPServer và port(chú ý là số cổng của Client phải trùng với Server. Bước 3 : Server chấp nhập kết nối từ Client (Server.Java) Socket client=server.accept(); Bước 4 : Bắt đầu tiến hành làm việc theo yêu cầu của đề bài Mẫu Code Gửi Thông Tin Từ Client : //khai báo pw để cho phép gửi thông tin PrintWriter pw=new PrintWriter(server.getOutputStream()); //Các lệnh tiến hành gửi thông điệp String st = "Thông điệp được gửi đi từ Client"; pw.write(st); pw.write("\n"); pw.flush(); Mẫu Code Nhận Thông Tin Của Client: //Khai báo br để đọc thông tin được gửi đến Client BufferedReader br = new BufferedReader(new InputStreamReader( server.getInputStream( ) ) ); //Lệnh đọc thông tin st=br.readLine(); http://dontruongbt.spaces.live.com/ - 1 -

HuongDanVietClientServer

Embed Size (px)

Citation preview

Page 1: HuongDanVietClientServer

Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

TÀI LIỆU ÔN TẬP LẬP TRÌNH MẠNG

Phần I : Kết Nối Bằng TCP/IP

Bước 1 : Khai báo các thông số kết nối cho Server (Server.Java)

ServerSocket server=new ServerSocket(8080); //có thể thay đổi số cổng 8080 thành cổng khác

Bước 2 : Khởi động client để kết nối đến Server (Client.Java)

Socket server=new Socket("127.0.0.1",8080); //có thể thay đổi IPServer và port(chú ý là số cổng của Client phải trùng với Server.

Bước 3 : Server chấp nhập kết nối từ Client (Server.Java)

Socket client=server.accept();

Bước 4 : Bắt đầu tiến hành làm việc theo yêu cầu của đề bài

Mẫu Code Gửi Thông Tin Từ Client : //khai báo pw để cho phép gửi thông tin PrintWriter pw=new PrintWriter(server.getOutputStream()); //Các lệnh tiến hành gửi thông điệpString st = "Thông điệp được gửi đi từ Client";pw.write(st);pw.write("\n");pw.flush();

Mẫu Code Nhận Thông Tin Của Client: //Khai báo br để đọc thông tin được gửi đến ClientBufferedReader br = new BufferedReader(new InputStreamReader( server.getInputStream( ) ) );//Lệnh đọc thông tin st=br.readLine();

Mẫu Code Gửi Thông Tin Từ Server : //khai báo pw để cho phép gửi thông tin PrintWriter pw=new PrintWriter(client.getOutputStream()); //Các lệnh tiến hành gửi thông điệpString st = "Thông điệp được gửi đi từ Server : ";pw.write(st);pw.write("\n");pw.flush();

http://dontruongbt.spaces.live.com/ - 1 -

Page 2: HuongDanVietClientServer

Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

Mẫu Code Nhận Thông Tin Của Server : //Khai báo br để đọc thông tin được gửi đến ServerBufferedReader br = new BufferedReader(new InputStreamReader( client.getInputStream( ) ) );//Lệnh đọc thông tin st=br.readLine();

Mẫu Code Xử lý chuỗi bằng hàm :st = HamXuLyChuoi(st); // VD : hàm chuẩn hoá chuỗi : st = ChuanHoa(st);

Phần II : Kết Nối Bằng UDP

Bước 1 : Khai báo các thông số kết nối cho Server (Server.Java)

int port = 2812; //có thể thay đổi bằng cổng khácDatagramSocket socket = new DatagramSocket(port);

Bước 2 : Khởi động client để kết nối đến Server (Client.Java)

DatagramSocket socket = new DatagramSocket();InetAddress ipServer = InetAddress.getByName("localhost");//"server name"int port = 2812;

Bước 3: Bắt đầu tiến hành làm việc theo yêu cầu của đề bài

Mẫu Code Gửi Thông Tin Từ Client : byte []sendData;System.out.print("\nClient : ");stSend=in.readLine();//dữ liệu được nhập từ bàn phím để gửi đisendData = stSend.getBytes(); //chuyển sang dạng Byte để gửiDatagramPacket sendPacket = new DatagramPacket( sendData,sendData.length,ipServer,portServer);socket.send(sendPacket);

Mẫu Code Nhận Thông Tin Của Server : byte []buffer = new byte[1024];DatagramPacket receivePacket = new DatagramPacket(buffer,buffer.length);socket.receive(receivePacket);String stReceive = new String(receivePacket.getData(),0,receivePacket.getLength());

http://dontruongbt.spaces.live.com/ - 2 -

Page 3: HuongDanVietClientServer

Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

Mẫu Code Gửi Thông Tin Từ Server : byte []sendData;BufferedReader in = new BufferedReader(new InputStreamReader(System.in));System.out.print("\nServer : ");String stSend = in.readLine();sendData = stSend.getBytes();DatagramPacket sendPacket = new DatagramPacket( sendData,sendData.length,ipClient,portClient);

Mẫu Code Nhận Thông Tin Của Server : byte []buffer = new byte[1024];packet = new DatagramPacket(buffer,buffer.length);socket.receive(packet);stReceive = new String(packet.getData(),0,packet.getLength());System.out.println("\nClient : " + stReceive);

Mẫu Code Xử lý chuỗi bằng hàm :stReceive= HamXuLyChuoi(stReceive); //VD : stReceive= ChuanHoa(stReceive);

Phần III : Một số chương trình con xử lý chuỗi

A, hàm chuẩn hoá chuỗi, kết quả trả về là 1 chuỗi sau khi đã chuẩn hoá :public String ChuanHoa(String st){

st=st.trim();while (st.indexOf(" ")>=0){ st=st.replaceAll(" "," ");}st = st.toLowerCase();String[] ARR=st.split(" ");for (int i = 0; i < ARR.length; i++)

ARR[i]=ARR[i].substring(0, 1).toUpperCase().concat(ARR[i].substring(1));st="";for (int i = 0; i < ARR.length-1; i++)

st=st.concat(ARR[i])+" ";st=st.concat(ARR[ARR.length-1]);return st;

}

B, Hàm đảo ngược chuỗi :public String DaoNguoc(String st){

StringBuffer temp = new StringBuffer(st);

http://dontruongbt.spaces.live.com/ - 3 -

Page 4: HuongDanVietClientServer

Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

return temp.reverse().toString();}

C, Hàm đếm số ký tự trong chuỗi (không tính dấu cách) :public int DemKyTu(String st){

int dem=0;for (int i=0; i<st.length(); i++)

if (st.charAt(i)!=' ')dem = dem + 1;

return dem;}Trường hợp tính cả dấu cáchpublic int DemKyTu(String st){

return st.length();}

D, Hàm đếm số từ trong chuỗi (chuỗi đã chuẩn hoá) :public int DemTu(String st){

String[] temp;temp = st.split(" ");return temp.length;

}

Trường hợp chuỗi chưa chuẩn hóa:public int DemTuTrongChuoiKhongChuanHoa(String st){

int dem;if (st.charAt(0)!=' ')

dem = 1;else

dem = 0;for (int i=0;i<st.length();i++ ){

if (st.charAt(i)==' ' && st.charAt(i+1)!=' '){

dem++;}

}return dem;

}

E, Đếm số lần xuất hiện của các ký tự trong chuỗi (có phân biệt hoa thường) :

http://dontruongbt.spaces.live.com/ - 4 -

Page 5: HuongDanVietClientServer

Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

public void DemSoLanXuatHienKyTu(String st){

char kt;int dem;System.out.println("So lan xuat hien cac ky tu trong chuoi : ");for (kt='A';kt<='z' ;kt++ ){

dem = 0;for (int i=0;i<st.length();i++)

if (kt==st.charAt(i))dem++;

if (dem!=0)System.out.println("\tKy tu " + kt + " xuat hien " + dem + " lan");

}}

F, Đếm số lần xuất hiện các ký tự, không phân biệt chữ hoa thường :public void DemSoLanXuatHienKyTu1(String st){

char kt;int dem;String temp = st.toUpperCase();System.out.println("So n xuat hien cac ky tu trong chuoi : ");for (kt='A';kt<='Z' ;kt++ ){

dem = 0;for (int i=0;i<st.length();i++)

if (kt==temp.charAt(i))dem++;

if (dem!=0)System.out.println("\tKy tu " + kt + " xuat hien " + dem + " lan");

}}

G, Đếm số lần xuất hiện của 1 chuỗi tìm trong chuỗi :public void DemSoLanXuatHienTu(String st){

int dem=0;String sTim = "Truongbt";for (int i=0;i<=st.length()-sTim.length();i++)

if (sTim.equalsIgnoreCase(st.substring(i,i+sTim.length())))dem++;

if (dem==0)System.out.println("Chuoi '"+ sTim +"' khong xuat hien trong chuoi.");

elseSystem.out.println("Chuoi '"+ sTim +"' xuat hien " + dem + " lan.");

http://dontruongbt.spaces.live.com/ - 5 -

Page 6: HuongDanVietClientServer

Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

}Đếm số lần xuất hiện của 1 ký tự trong chuỗi :public int DemKT(String st){

int dem = 0;char kt='A'; //ký tự muốn đếmfor (int i=0;i<st.length();i++)

if (kt==st.charAt(i))dem++;

return dem;}

H, Thay thế toàn bộ chuỗi Tìm bằng chuỗi Thay Thế : public String ThayThe(String st){

String sTim = "Chuỗi Tìm";String sThayThe = "Chuỗi Thay Thế";st = st.replaceAll(sTim,sThayThe);return st;

}Trường hợp thay thế ký tự tìm bằng ký tự thay thếpublic String ThayTheKyTu(String st){

char kTim = 'a';char kThayThe = '@';st = st.replace(kTim,kThayThe);return st;

}

I, Kiểm tra chuỗi có toàn số hay không?public boolean ktChuoiSo(String str){

for(int i=0;i<str.length();i++)if(str.charAt(i)<'0'||'9'<str.charAt(i))

return false;return true;

}

K, Biến chuỗi thành chuỗi chữ hoapublic String ChuoiHoa(String str){

return str.toUpperCase();}

L, Biến chuỗi thành chuỗi chữ thường

http://dontruongbt.spaces.live.com/ - 6 -

Page 7: HuongDanVietClientServer

Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

public String ChuoiThuong(String str){

return str.toLowerCase();}

M, Kiểm tra xem chuỗi có đối xứng hay không?public boolean KiemTraDoiXung(String st){

StringBuffer stTemp = new StringBuffer(st);String st1 = stTemp.reverse().toString();if (st1.equals(st))

return true;else

return false;}

N, Biến chữ cái đầu sau dấu cách thành chữ hoa :public String ChuHoaDau(String st){

if (st.charAt(0)!=' '){

st = st.substring(0,1).toUpperCase().concat(st.substring(1));}for (int i=0;i<st.length() ;i++ )

if (st.charAt(i)==' '){

int vt = i+1;String st1 = st.substring(0,vt);String st2 = st.substring(vt,vt+1).toUpperCase();String st3 = st.substring(vt+1);st = st1.concat(st2.concat(st3));

}return st;

}

Phần IV: Bài Tập Ứng Dụng :Hãy viết một ứng dụng Client/Server, sử dụng socket, theo yêu cầu sau :

- Chương trình Client :o Cho phép người dùng nhập vào một chuỗi ký tựo Gửi chuỗi ký tự nhận được đến Servero Nhận dữ liệu trả về từ Server và in ra màn hìnho Kết thúc chương trình.

- Chương trình Server :o Nhận kết nối từ Client

http://dontruongbt.spaces.live.com/ - 7 -

Page 8: HuongDanVietClientServer

Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

o Nhận chuỗi ký tự từ Cliento Thay thế tất cả các chuỗi con “Dai Hoc” bằng chuỗi “DH” và gửi về cho Client

Kết thúc chương trình.

MayKhach.java

import java.io.*;import java.net.*;import java.util.*;

class MayKhach {

public static void main(String[] args) throws Exception{

Socket server=new Socket("127.0.0.1",8080);//có thể đổi IP hoặc PortSystem.out.println("Client kết nối đến cổng 8080 của Server...");

PrintWriter pw=new PrintWriter(server.getOutputStream());BufferedReader br=new BufferedReader(new

InputStreamReader(server.getInputStream()));String st;

//Nhập chuỗi bất kỳ từ bàn phímBufferedReader in = new BufferedReader(new InputStreamReader(System.in));System.out.print("Nhap chuoi bat ky : ");st = in.readLine();

//Gửi chuỗi đã nhập từ bàn phím đến Máy Chủpw.write(st);pw.write("\n");pw.flush();

//Nhận lại chuỗi được gửi trả về từ Máy Chủ và in lên màn hìnhst=br.readLine();System.out.println("Chuoi nhan duoc tu Server : " + st);

//Kết thúc chương trìnhpw.close();br.close();server.close();

}}

http://dontruongbt.spaces.live.com/ - 8 -

Page 9: HuongDanVietClientServer

Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

MayChu.java

import java.io.*;import java.net.*;import java.util.*;

class MayChu {

public static void main(String[] args) throws Exception{

ServerSocket server=new ServerSocket(8080);//cổng trùng với cổng ở ClientSystem.out.println("Server chờ kết nối ở cổng 8080....");

Socket client=server.accept();System.out.println("Kết Nối Thành Công.");

PrintWriter pw=new PrintWriter(client.getOutputStream());BufferedReader br=new BufferedReader(new

InputStreamReader(client.getInputStream()));String st="";

//Nhận chuỗi bất kỳ được gửi từ bàn phímst=br.readLine();

//Tiến hành thay thế chuỗi, hàm thay thế được viết bên dướist=ThayThe(st);

//Gửi trả lại chuỗi sau khi đã thay thế về cho Máy Kháchpw.write(st);pw.write("\n");pw.flush();

//Kết thúc chương trìnhbr.close();

pw.close(); client.close();

}public static String ThayThe(String st){

String sTim = "Dai Hoc";String sThayThe = "DH";st = st.replaceAll(sTim,sThayThe);return st;

}}

http://dontruongbt.spaces.live.com/ - 9 -