You are on page 1of 11

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();

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ệp
String st = "Thông điệp được gửi đi từ Server : ";
pw.write(st);
pw.write("\n");
pw.flush();

Mẫu Code Nhận Thông Tin Của Server :

http://dontruongbt.spaces.live.com/ -1-
Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

//Khai báo br để đọc thông tin được gửi đến Server


BufferedReader 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ác
DatagramSocket 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 đi
sendData = stSend.getBytes(); //chuyển sang dạng Byte để gửi
DatagramPacket 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-
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-
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ách
public 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-
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.");
else
System.out.println("Chuoi '"+ sTim +"' xuat hien " + dem + " lan.");

http://dontruongbt.spaces.live.com/ -5-
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 đếm
for (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ữ hoa


public 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-
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();
f (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 Server
o Nhận dữ liệu trả về từ Server và in ra màn hình
o 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-
Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

o Nhận chuỗi ký tự từ Client


o 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 Port


System.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ím


BufferedReader 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ình
st=br.readLine();
System.out.println("Chuoi nhan duoc tu Server : " + st);

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


pw.close();
br.close();
server.close();
}
}

http://dontruongbt.spaces.live.com/ -8-
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 ở Client
System.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ím


st=br.readLine();

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

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

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


br.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-
Tài Liệu Ôn Thi Lập Trình Mạng Mobile : 0989995221

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 Server
o Nhận dữ liệu trả về từ Server và in ra màn hình
o Kết thúc chương trình.
- Chương trình Server :
o Nhận kết nối từ Client
o Nhận chuỗi ký tự từ Client
o Đếm số lần ký tự A xuất hiện trong chuỗi và gửi kết quả 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 Port
System.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ím
BufferedReader 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ình
int dem =Integer.parseInt(br.readLine());
if (dem!=0)
System.out.println("Ký tự 'A' xuất hiện " + dem + " lần.");
else
System.out.println("Ký tự 'A' không xuất hiện trong chuỗi.");
//Kết thúc chương trình
pw.close();
br.close();
server.close();
}
}

http://dontruongbt.spaces.live.com/ - 10 -
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 ở Client
System.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ừ Client


st=br.readLine();

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

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

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


br.close();
pw.close();
client.close();
}
public static int DemKT(String st)
{
int dem = 0;
char kt='A';
for (int i=0;i<st.length();i++)
if (kt==st.charAt(i))
dem++;
return dem;
}
}

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

You might also like