tài liệu lập trình mạng máy tính java mới nhất cho mọi người
Trang 1Mục lục
Trang 2Câu 2: Viết chương trình Client – Server thực hiện các chức năng: client gửi yêu cầu kết nối, client gửi lên xâu ký tự, server gửi về xâu đảo ngược.
public class TCPClient {
public static void main(String []args) throws IOException{
//Khai bao socket để làm việc với server qua địa chỉ IP và Cổng//Chú ý cổng phải trùng với khai báo trên server
Socket cs = new Socket("127.0.0.1", 1234);
//Khai báo 2 đối tượng để đọc và ghi dữ liệuDataInputStream din = new DataInputStream(cs.getInputStream());
DataOutputStream dout = new DataOutputStream(cs.getOutputStream());String strSend, strReturn;
try {
while (true) {
//Hộp thoại để nhập dữ liệu đầu ra là kiểu stringstrSend = JOptionPane.showInputDialog(null,"Please enter text to dialog for send to server:");
//gửi dữ liệu vào Stream để gửi lên Serverdout.writeUTF(strSend);
//Đọc dữ liệu từ StreamstrReturn = din.readUTF();
//Hộp thoại hiển thị dữ liệu
Trang 3JOptionPane.showMessageDialog(null, "The text from Server: "+strReturn);
}} catch (Exception e) { cs.close();}
public class TCPServer {
public static void main (String [] args) throws IOException{
//Khai báo socket trên server với cổng 1234ServerSocket ss = new ServerSocket(1234);
//In thông báo ra màn hìnhSystem.out.println("Server is Open");
//Khai bao socket phía client chú ý "ss" là socket phía serverSocket cs = ss.accept();
//Khai báo 2 đối tượng để đọc ghi dữ liệu từ socketDataInputStream din = new DataInputStream(cs.getInputStream());
DataOutputStream dout = new DataOutputStream(cs.getOutputStream());String strReceive, strReturn;
try {
while (true) {
//Đọc dữ liệu trong Stream gửi từ Client
Trang 4strReceive = din.readUTF();
//Sử dụng phương thức Reverse() để đảo ngược xâu ký tựstrReturn = new StringBuffer(strReceive).reverse().toString();//Server ghi dữ liệu vào stream để gửi cho Client
dout.writeUTF(strReturn);
}} catch (Exception e) {
//Đóng socket nếu gặp lỗics.close(); ss.close();
}}
public class BinaryFile {
private static DataInputStream din;
private static DataOutputStream dout;
private static Scanner sc;
Trang 5public static void main (String [] args) throws FileNotFoundException,
if (kt==true) { kq += i + " "; }}
//Ghi du lieu vao file nhi phandout = new DataOutputStream(new FileOutputStream("Data.dat"));
dout.writeUTF(kq);
System.out.println("Write data success.");
//Doc du lieu tu file nhi phandin = new DataInputStream(new FileInputStream("Data.dat"));
readData = din.readUTF();
System.out.println("Data is: " + readData);
}
Trang 6public class TextFile {
private static Scanner sc;
public static void main (String[] args) throws FileNotFoundException,
Trang 7if (kt==true) { kq += i + " "; }}
//Khai bao đối tượng FileWriter để Ghi du lieu vao file textFileWriter fw = new FileWriter(new File("Data.txt"));
//Ghi dữ liệu của "kq" vào file Data.txtfw.write(kq);
fw.close();
System.out.println("Write data success.");
//Khai báo 2 đối tượng để đọc dữ lieu từ file textFileReader fr = new FileReader(new File("Data.txt"));
StringBuffer sb = new StringBuffer();
//Khai báo mảng để chứa dữ liệuchar ca[] = new char[2];
//Đọc dữ liệu khi nào đọc xong thì kết thúc vòng lặpwhile(fr.ready()){
int len = fr.read(ca);
sb.append(ca,0,len);
}fr.close();
System.out.println("Du lieu doc duoc la: " + sb);
}
}
Câu 4: Viết chương trình Client – Server, server đọc danh sách Username/Password
từ một file văn bản user.txt, client gửi yêu cầu kết nối, server kiểm tra
Username/Password nếu đúng thì cho phép kết nối Nếu sai thì gửi thông báo “Sai thông tin đăng nhập” về cho client và đóng kết nối (sử dụng multithread)
* phía Client
Trang 8public class Client {
public static void main(String [] args){
try {
Socket cs = new Socket("127.0.0.1", 1234);
// PrintWriter out = new PrintWriter(socket.getOutputStream(),true);//BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
DataInputStream din = new DataInputStream(cs.getInputStream());DataOutputStream dout = new
DataOutputStream(cs.getOutputStream());
Scanner scanner = new Scanner(System.in);
String strSend = "", strReturn = "";
}
*phía Serve
Trang 9public class Server {
public static void main (String [] args){
ServerSocket server = null;
while (true) {
Socket client = server.accept();
System.out.println("New Client connected " + client.getInetAddress().getHostAddress());
ClientHandler clientSock = new ClientHandler(client);
new Thread(clientSock).start();
}}
//tạo thread
public static class ClientHandler implements Runnable{
private final Socket cs;
public ClientHandler (Socket socket) { this.cs = socket; }public void run(){
DataInputStream din = null;
DataOutputStream dout = null;
String strReceive, strReturn;
while (true) {
strReceive = din.readUTF();
System.out.printf("Sent from the client: %s\n", strReceive);
Trang 10strReturn = new StringBuffer(strReceive).reverse().toString();dout.writeUTF(strReturn);
}}
}
}
Câu 5: Viết chương trình tạo ra một đối tượng FileTWrite kế thừa đối đối tượng Thread (hoặc cài đặt giao diện Runable), cho phép viết một dãy số ngẫu nhiên vào tập tin Đối tượng FileTWriter có thuộc tính tên tập tin cần viết Viết hàm main tạo
ra 3 đối tượng viết 3 tập tin chạy ở 3 tiến trình đồng thời riêng biệt.
*lớp filewwirter để ghi tập tin
public class FileWrite extends Thread {
private static final int xsize = 10;
private int x;
private String name;
public FileWrite (String ten) {
this.name= ten;
}
public void nhap() {
try {
FileWriter fra= new FileWriter(name);
BufferedWriter bw = new BufferedWriter(fra);
Trang 11Random rd=new Random();
public class Main5 {
public static void main(String[] args ) {
FileWrite f1 = new FileWrite( "tep1.txt" );
Trang 12Câu 6: Viết chương trình tạo ra một đối tượng FileTReader kế thừa đối đối tượng Thread (hoặc cài đặt Runable), cho phép đọc nội dung một tập tin và hiển thị lên màn hình Đối tượng FileReader có thuộc tính tên tập tin cần mở Viết hàm main tạo ra 3 đối tượng đọc 3 tập tin chạy ở 3 tiến trình đồng thời riêng biệt
*class file Reader để đọc tập tin
public FileRead(String ten){ this.name = ten; }
public void load(){
try {
FileReader fvao = new FileReader(name);
BufferedReader br = new BufferedReader(fvao);
Trang 13public class Main6 {
public static void main(String[] args ) {
FileRead f1 = new FileRead( "file1.txt" );
Tạo file wirter (bài 5) và class reader (bài 6) sau đó sử dụng hàm main để chạy
package Bai7;
import Bai5.FileWrite;
import Bai6.FileRead;
public class Main {
public static void main(String[] args) {
FileWrite fra = new FileWrite("test.txt");
* To change this license header, choose License Headers in Project Properties
* To change this template file, choose Tools | Templates
Trang 14* and open the template in the editor.
public class Address {
public static void main(String[] args) throws MalformedURLException, IOException { URL u = new URL("http://www.poly.edu/fall97/grad.php?q=idx#cs ");
System.out.println("The protocol is" + u.getProtocol());
System.out.println("The host is " + u.getHost());
System.out.println("The port is " + u.getPort());
System.out.println("The file is " + u.getFile());
URLConnection uc = u.openConnection();
String thisLine;
DataInputStream dis = new DataInputStream(u.openStream());
while ((thisLine = dis.readLine()) != null) {
Trang 15System.out.println(thisLine);
}
uc.setDoOutput(true);
DataOutputStream dos;
dos = new DataOutputStream(uc.getOutputStream());
// dos.writeByte("Here is some data");
try {
if (args.length != 1) {
System.out.println("Cach su dung: java TimDCIP <Hostname>");
}
InetAddress host = InetAddress.getByName(u.toString());
String hostName = host.getHostName();
System.out.println("Host name:" + hostName);
System.out.println("Dia chi IP:" + host.getHostAddress());
InetAddress me = InetAddress.getLocalHost();
byte[] address = me.getAddress();
for (int i = 0; i < address.length; i++) {
Trang 16CHUẨN HÓA CHUỖI
/*
* To change this license header, choose License Headers in Project Properties
* To change this template file, choose Tools | Templates
* and open the template in the editor
public class ReadWrite {
public static void ChuanHoa(String s) {
String temp[] = s.split(" ");
for (int i = 0; i < s.length(); i++) {
Trang 17}
public static void main(String[] args) throws IOException {
try {
String fileName = "D:\\VB.txt";
// Đọc tâp tin vào chuỗi sb
FileReader fr = new FileReader(fileName);
StringBuffer sb = new StringBuffer();
char ca[] = new char[5]; // Đọc mỗi lần tối đa 5 ký tự
String filename1 = "D:\\ChuanHoa.txt";
FileWriter fw = new FileWriter(fileName);
Trang 18Socket s=new Socket(host,i);
System.out.println("Co mot server dang
hoat dong tren cong:"+i);
} catch(UnknownHostException e){
System.err.println(e);
} catch(IOException e){
System.err.println(e);
} }
Ví dụ: Cài đặt một server daytime
import java.net.*;
import java.io.*;
import java.util.Date;
public class daytimeServer{
public final static int daytimePort =13;
public static void main(String[]args)
{
ServerSocket theServer;
Socket con;
Trang 20Socket s=new Socket(hostname,2007);
br=newBufferedReader(new InputStreamReader(s.getInputStream())); BufferedReader user;
user=new BufferedReader(new InputStreamReader(System.in));
Trang 21Trong phần dưới đây chúng ta sẽ xem xét cách tiến hành cài đặt một chương trình client/server đa tuyến đoạn
Chương trình phía server
import java.io.*;
import java.net.*;
class EchoServe extends Thread
{
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public EchoServe (Socket s) throws IOException
// Nếu bất kỳ lời gọi nào ở trên đưa ra ngoại lệ
// thì chương trình gọi có trách nhiệm đóng socket Ngược lại tuyến đoạn sẽ
Trang 22static int PORT=0;
public static void main(String[] args) throws IOException
// Tạo một đối tượng Server Socket
ServerSocket s = new ServerSocket(PORT);
InetAddress addrs= InetAddress.getLocalHost();
System.out.println("TCP/Server running on : "+ addrs +" ,Port
"+s.getLocalPort());
try {
while(true) {
// Phong tỏa cho tới khi có một liên kết đến
Socket socket = s.accept();
try {
new EchoServe(socket);
Trang 23// Tạo một tuyến đoạn quản lý riêng từng liên kết } catch(IOException e) {
InetAddress addr = InetAddress.getByName(args[0]);
Socket socket = new Socket(addr, Integer.parseInt(args[1]));
try {
System.out.println("socket = " + socket);
BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream()));
// Output is automatically flushed by PrintWriter:
PrintWriter out =new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),true);
// Đọc dòng ký tự từ bàn phím
DataInputStream myinput = new DataInputStream(new
Trang 24try
{
for(;;){
System.out.println("Type anything followed by RETURN, or Exit
to terminate the program.");
String strin=myinput.readLine();
// Quit if the user typed ctrl+D
if (strin.equals("exit")) break;
else
out.println(strin); // Send the message
String strout = in.readLine(); // Recive it back
if ( strin.length()==strout.length())
{ // Compare Both Strings System.out.println("Received: "+strout);
} else System.out.println("Echo bad string unequal"+ strout); } // of for ;;
}catch (IOException e){
Trang 25String fileName= "C:\\TestB.txt" ;
// Phát sinh và xuất mảng ngẫu nhiên
byte[]a=new byte[10];
System.out.print( "Du lieu phat sinh: " );
for(int i=0;i<a.length;i++)
// Ghi mảng a vào tập tin
FileOutputStream fo=new FileOutputStream(fileName);
fo.write(a);
fo.close();
// Đọc tập tin vào mảng b
FileInputStream fi=new FileInputStream (fileName);
byte[]b= new byte[fi.available()];
fi.read(b);
fi.close();
// Xuất mảng b
System.out.print( "Du lieu doc duoc : " );
for(int i=0;i<b.length;i++)
{
System.out.print(b[i]+ " " );
}
Trang 26Kết quả thực thi (các con số sẽ khác nhau với mỗi lần chạy):
Du lieu phat sinh: 4 14 0 16 2 19 10 9 9 15
Du lieu doc duoc : 4 14 0 16 2 19 10 9 9 15
Press any key to continue
Ví dụ về luồng mảng: Tạo một mảng gồm 100 byte rồi gắn vào mảng này một luồng ByteArrayInputStream để lấy dữ liệu ra.
byte[] b = new byte[100];
for(byte i=0;i<b.length;i++) b[i]=i;
Ví dụ luồng viết mảng: Viết chương trình tạo lập một luồng xuất mảng
(ByteArrayOutputStream) 100 byte Ghi vào luồng xuất mảng 100 phần tử từ 0 đến
99 Đổ dữ liệu từ luồng xuất mảng vào mảng b In dữ liệu từ mảng b ra màn hình.
Trang 27//Tao mot luong xuat mang 100 byte
ByteArrayOutputStream os = new ByteArrayOutputStream(100);
//Ghi du lieu vao luong
for(byte i=0;i<100;i++) os.write(i);
//Doc du lieu tu luong vao mang
PipedInputStream pi= new PipedInputStream();
PipedOutputStream po= new PipedOutputStream(pi);
// Ghi các số nguyên ngẫu nhiên bằng PipedOutputStream
System.out.print( "Du lieu ghi duoc: " );
for(int i=0;i<10;i++)
// Đọc các số nguyên từ PipedOutputStream bằng PipedInputStream
System.out.print( "Du lieu doc duoc: " );
while (pi.available()>0)
Trang 28Dùng file reader và file writer:
String fileName= "C:\\TestC.txt" ;
String s= "Hello File Reader/Writer!" ;
System.out.println( "Du lieu ban dau : " +s);
// Ghi s vào tập tin
FileWriter fw=new FileWriter(fileName);
fw.write(s);
fw.close();
// Đọc tâp tin vào chuỗi sb
FileReader fr=new FileReader(fileName);
StringBuffer sb=new StringBuffer();
char ca[]=new char[5]; // Đọc mỗi lần tối đa 5 ký tự
Du lieu ban dau : Hello File Reader/Writer!
Du lieu doc duoc : Hello File Reader/Writer!
Press any key to continue
Trang 29Dùng piped reader và piped writer:
PipedReader pr=new PipedReader();
PipedWriter pw=new PipedWriter(pr);
// PipedWriter gởi dữ liệu
String s= "Hello Piped Reader/Writer!" ;
System.out.println( "Du lieu ghi : " +s);
pw.write(s);
pw.close();
// PipedReader nhận dữ liệu
StringBuffer sb=new StringBuffer();
char ca[]=new char[5]; // Đọc mỗi lần tối đa 5 ký tự
Du lieu ghi : Hello Piped Reader/Writer!
Du lieu doc duoc: Hello Piped Reader/Writer!
Ví dụ: đọc/ghi các biến trên tập tin
String name= "C:\\TestD.txt" ;
Trang 30boolean b=fi.readBoolean();
int i=fi.readInt();
float f=fi.readFloat();
fo.close();
// Xuất dữ liệu đọc được ra màn hình
System.out.println( "Du lieu doc duoc: " );
String fileName= "C:\\TestC.txt" ;
String s= "Hello Buffered File Reader/Writer!" ;
System.out.println( "Du lieu ban dau : " +s);
// Ghi s vào tập tin
BufferedWriter bw=new BufferedWriter(new FileWriter(fileName));
bw.write(s);
bw.close();
// Đọc tâp tin vào chuỗi sb
BufferedReader br=new BufferedReader(new FileReader(fileName));
StringBuffer sb=new StringBuffer();
char ca[]=new char[5]; // Đọc mỗi lần tối đa 5 ký tự