Cập nhật thông tin chi tiết về Autocad Ứng Dụng Trong Ngành Xây Dựng mới nhất trên website Karefresh.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất.
Hi bạn!
Khi nói đến AutoCAD trong chuyên ngành XÂY DỰNG rất nhiều bạn liên tưởng ngay đến AutoCAD trong xây dựng nhà ở (xây dựng dân dụng), AutoCAD trong xây dựng cầu đường, AutoCAD trong xây dựng nhà xưởng…
Tuy nhiên thực tế chuyên ngành xây dựng được chia ra khá nhiều chuyên ngành nghề khác nhau trên cơ sở phân loại theo công trình, ví dụ như:
Xây dựng Dân dụng và Công nghiệp
Xây dựng Cảng – Đường thủy
Xây dựng Thủy lợi – Thủy điện
Xây dựng công trình giao thông
Cấp thoát nước
Xây dựng Công trình biển – Dầu khí
Kiến trúc
Nội thất
Cơ sở hạ tầng giao thông
…
Vi dụ: Bạn là KIẾN TRÚC SƯ hoặc là KỸ SƯ có khách đang muốn xây nhà ở trên một lô đất có sẵn với một khoản tiền đã được định sẵn.
Công việc của bạn lúc bây giờ là hỏi thăm về nhu cầu của khách về căn nhà: nhà bao nhiêu người ở, cần mấy phòng ngủ… khách thích xây nhà theo phong cách nào…Sau khi hỏi khách xong, chắc chắn trong đầu bạn sẽ hình dung ra được đại khái ngôi nhà xây lên sẽ như thế nào.
Tuy nhiên, khách không thể nào hình dung cụ thể như bạn được. Để khách hiểu được ý tưởng thiết kế của bạn về ngôi nhà, bạn phải VẼ cho khách xem. Đây là giai đoạn THIẾT KẾ, và AutoCAD sẽ góp phần giúp bạn rất nhiều trong công việc này.
Thay vì phải vẽ tay, mất rất nhiều thời gian như ngày xưa, thì với AutoCAD, việc hình thành bản vẽ của bạn sẽ nhanh hơn vài lần, vài chục lần, hoặc có những trường hợp xử lý ứng dụng tốt AutoCAD có thể nhanh hơn gấp cả trăm lần.
Việc hình thành MẶT BẰNG các tầng của ngôi nhà, các phòng chức năng như phòng ngủ, phòng sinh hoạt, phòng bếp, phòng vệ sinh,…bạn đều hoàn toàn có thể dùng AutoCAD để hỗ trợ giúp năng suất công việc nâng cao hơn rất nhiều.
Sau khi dựng xong mặt bằng, công việc tiếp theo sẽ là dựng các MẶT ĐỨNG bên ngoài ngôi nhà, MẶT CẮT ngang, MẶT CẮT dọc ngôi nhà, thể hiện chi tiết cho các phòng chức năng,…Tất nhiên ở đây, AutoCAD cũng vẫn tiếp tục được phát huy tiện ích trong công việc này.
Sau khi hình thành xong BẢN VẼ THIẾT KẾ, việc còn lại là của bộ phận thi công: xây dựng ngôi nhà dựa theo bản vẽ thiết kế đã có sẵn. Ở giai đoạn này, AutoCAD lại một lần nữa giúp nhà thi công xử lý và hoàn thành bản vẽ hoàn công.
Qua ví dụ vừa rồi, bạn thấy được, từ khâu thiết kế, tư vấn khách, đến khâu thi công đề cần đến bản vẽ. Cho đến thời điểm hiện tại, có nhiều phần mềm hỗ trợ trong việc hình thành bản vẽ, tuy nhiên AutoCAD vẫn đang là lựa chọn phổ biến nhất.
Bạn thử search tìm trên google với cụm từ: “tuyển thiết kế xây dựng”, lần đọc theo những tin tuyển dụng đó bạn sẽ thấy hầu hết trong các yêu cầu luôn đòi hỏi ứng viên biết sử dụng AutoCAD hoặc là thành thạo AutoCAD.
Tuy nhiên, không phải biết sử dụng AutoCAD là bạn đủ khả năng trình bày một bản vẽ theo đúng chuyên ngành mình mong muốn. Để trình bày một bản vẽ kỹ thuật theo cho một chuyên ngành bạn cần hội đủ những yếu tố sau đây:
Phải thành thạo AutoCAD.
Biết phân tích hình.
Biết phương pháp dựng hình.
Biết biểu diễn vật thể.
Nguyễn Hà Xuân Tám
Xây Dựng Ứng Dụng Client
Bài viết được sự cho phép của tác giả Giang Phan
Socket là phương tiện hiệu quả để xây dựng các ứng dụng theo kiến trúc Client-Server. Trong bài viết này, tôi sẽ hướng dẫn các bạn các bước cơ bản trong việc xây dựng các ứng dụng Client-Server sử dụng Socket làm phương tiện giao tiếp theo cả hai chế độ: có nối kết (TCP – Transmission Control Protocol) và không nối kết ( UDP – User Datagram Protocol).
Các bạn nên xem bài viết giới thiệu Lập trình mạng trong Java trước khi tiếp tục xem nội dung tiếp theo của bài viết.
Mô hình Client-Server sử dụng Socket ở chế độ có nối kết (TCP)
Giai đoạn 1: Server tạo Socket, gán số hiệu cổng và lắng nghe yêu cầu nối kết. Server sẵn sàng phục vụ Client.socket(): Server yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển.
bind(): Server yêu cầu gán số hiệu cổng (port) cho socket.
listen(): Server lắng nghe các yêu cầu nối kết từ các client trên cổng đã được gán.
Giai đoạn 2: Client tạo Socket, yêu cầu thiết lập một nối kết với Server.
socket(): Client yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển, thông thường hệ thống tự động gán một số hiệu cổng còn rảnh cho socket của Client.
connect(): Client gởi yêu cầu nối kết đến server có địa chỉ IP và Port xác định.
accept(): Server chấp nhận nối kết của client, khi đó một kênh giao tiếp ảo được hình thành, Client và server có thể trao đổi thông tin với nhau thông qua kênh ảo này.
Giai đoạn 3: Trao đổi thông tin giữa Client và Server.
Sau khi chấp nhận yêu cầu nối kết, thông thường server thực hiện lệnh read() và nghẽn cho đến khi có thông điệp yêu cầu (Request Message) từ client gởi đến.
Server phân tích và thực thi yêu cầu. Kết quả sẽ được gởi về client bằng lệnh write().
Sau khi gởi yêu cầu bằng lệnh write(), client chờ nhận thông điệp kết quả (ReplyMessage) từ server bằng lệnh read().
Giai đoạn 4: Kết thúc phiên làm việc.
Các câu lệnh read(), write() có thể được thưc hiện nhiều lần (ký hiệu bằng hình ellipse).
Kênh ảo sẽ bị xóa khi Server hoặc Client đóng socket bằng lệnh close().
Mô hình Client-Server sử dụng Socket ở chế độ không nối kết (UDP)
Có thể phân thành 3 giai đoạn như sau:
Giai đoạn 1: Server tạo Socket – gán số hiệu cổng.
socket(): Server yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển.
bind(): Server yêu cầu gán số hiệu cổng cho socket.
Giai đoạn 2: Client tạo Socket.
socket(): Client yêu cầu tạo một socket để có thể sử dụng các dịch vụ của tầng vận chuyển, thông thường hệ thống tự động gán một số hiệu cổng còn rảnh cho socket của Client.
Giai đoạn 3: Trao đổi thông tin giữa Client và Server.
Sau khi tạo Socket xong, Client và Server có thể trao đổi thông tin qua lại với nhau thông qua hai hàm send() và receive().
Đơn vị dữ liệu trao đổi giữa Client và Server là các Datagram Package (Gói tin thư tín).
Protocol của ứng dụng phải định nghĩa khuôn dạng và ý nghĩa của các Datagram Package. Mỗi Datagram Package có chứa thông tin về địa chỉ người gởi và người nhận (IP, Port).
Xây dựng ứng dụng Client-Server với Socket trong Java
Thông qua các lớp trong gói chúng tôi , các chương trình Java có thể sử dụng TCP hoặc UDP để giao tiếp qua Internet.
Lớp IntetAddress: Lớp này quản lý địa chỉ Internet bao gồm địa chỉ IP và tên máy tính.
Lớp DatagramPacket: Lớp cài đặt gói tin dạng thư tín người dùng (Datagram Packet) trong giao tiếp giữa Client và Server ở chế độ không nối kết.
Tuyển Java lương cao up to 2000 USD
Xây dựng chương trình Client – Server ở chế độ có nối kết (TCP)
Trong phần tiếp theo tôi sẽ hướng dẫn các bạn xây dựng chương trình Client – Server đơn giản. Client sẽ gởi lần lượt các số từ 0 đến 9 tới Server. Server lần lượt sẽ gởi các số nhận được về Client.
Các bước tổng quát xây dựng một chương trình Client – Server ở chế độ có nối kết như sau:
Mở một socket nối kết đến server đã biết địa chỉ IP (hay tên miền) và số hiệu cổng.
Lấy InputStream và OutputStream gán với Socket.
Tham khảo Protocol của dịch vụ để định dạng đúng dữ liệu trao đổi với Server.
Trao đổi dữ liệu với Server nhờ vào các InputStream và OutputStream.
Đóng Socket trước khi kết thúc chương trình.
Xây dựng chương trình Client ở chế độ có nối kết
Một số phương thức cần thiết để xây dựng các chương trình client sử dụng socket ở chế độ có nối kết:
public Socket(String HostName, int PortNumber) : Phương thức này dùng để nối kết đến một server có tên là HostName, cổng là PortNumber. Nếu nối kết thành công, một kênh ảo sẽ được hình thành giữa Client và Server.
HostName: Địa chỉ IP hoặc tên logic theo dạng tên miền.
PortNumber: có giả trị từ 0 ..65535
public InputStream getInputStream()
:
Phương thức này trả về InputStream nối với Socket. Chương trình Client dùng InputStream này để nhận dữ liệu từ Server gởi về.
public OutputStream getOutputStream()
:
Phương thức này trả về OutputStream nối với Socket. Chương trình Client dùng OutputStream này để gởi dữ liệu cho Server.
public close()
:
Phương thức này sẽ đóng Socket lại, giải phóng kênh ảo, xóa nối kết giữa Client và Server.
Code của chương trình Client như sau:
package com.gpcoder.tcp; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class EchoChatClient { public final static String SERVER_IP = "127.0.0.1"; public final static int SERVER_PORT = 7; public static void main(String[] args) throws IOException, InterruptedException { Socket socket = null; try { socket = new Socket(SERVER_IP, SERVER_PORT); System.out.println("Connected: " + socket); InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); for (int i = '0'; i <= '9'; i++) { os.write(i); int ch = is.read(); System.out.print((char) ch + " "); Thread.sleep(200); } } catch (IOException ie) { System.out.println("Can't connect to server"); } finally { if (socket != null) { socket.close(); } } } }
Xây dựng chương trình Server ở chế độ có nối kết
Một số phương thức cần thiết để xây dụng các chương trình Server sử dụng socket ở chế độ có nối kết.:
public ServerSocket(int portNumber)
: p
hương thức này tạo một Socket với số hiệu cổng là portNumber mà sau đó Server sẽ lắng nghe trên cổng này.
public Socket accept()
:
Phương thức này lắng nghe yêu cầu nối kết của các Client. Đây là một phương thức hoạt động ở chế độ nghẽn. Nó sẽ bị nghẽn cho đến khi có một yêu cầu nối kết của client gởi đến. Khi có yêu cầu nối kết của Client gởi đến, nó sẽ chấp nhận yêu cầu nối kết, trả về một Socket là một đầu của kênh giao tiếp ảo giữa Server và Client yêu cầu nối kết.
public InputStream getInputStream()
:
Phương thức này trả về InputStream nối với Socket. Chương trình Server dùng InputStream này để nhận dữ liệu từ Client gởi đến.
public OutputStream getOutputStream()
:
Phương thức này trả về OutputStream nối với Socket. Chương trình Server dùng OutputStream này để trả dữ liệu cho Client.
public close()
:
Phương thức này sẽ đóng Socket lại, giải phóng kênh ảo, xóa nối kết giữa Client và Server.
Một Server có thể được cài đặt để phục vụ các Client theo hai cách: phục vụ tuần tự hoặc phục vụ song song.
Trong chế độ phục vụ tuần tự, tại một thời điểm Server chỉ chấp nhận một yêu cầu nối kết. Các yêu cầu nối kết của các Client khác đều không được đáp ứng (đưa vào hàng đợi).
Ngược lại trong chế độ phục vụ song song, tại một thời điểm Server chấp nhận nhiều yêu cầu nối kết và phục vụ nhiều Client cùng lúc.
Xây dựng chương trình Server phục vụ tuần tự
Các bước thực hiện như sau:
Tạo socket và gán số hiệu cổng cho server.
Lắng nghe yêu cầu nối kết.
Với một yêu cầu nối kết được chấp nhận thực hiện các bước sau:
Lấy InputStream và OutputStream gắn với Socket của kênh ảo vừa được hình thành.
Lặp lại công việc sau:
Chờ nhận các yêu cầu (công việc).
Phân tích và thực hiện yêu cầu.
Tạo thông điệp trả lời.
Gởi thông điệp trả lời về Client.
Nếu không còn yêu cầu hoặc Client kết thúc, đóng Socket và quay lại bước 2.
Code của chương trình Server như sau:
package com.gpcoder.tcp; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class EchoChatSingleServer { public final static int SERVER_PORT = 7; public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; try { System.out.println("Binding to port " + SERVER_PORT + ", please wait ..."); serverSocket = new ServerSocket(SERVER_PORT); System.out.println("Server started: " + serverSocket); System.out.println("Waiting for a client ..."); while (true) { try { Socket socket = serverSocket.accept(); System.out.println("Client accepted: " + socket); OutputStream os = socket.getOutputStream(); InputStream is = socket.getInputStream(); int ch = 0; while (true) { ch = is.read(); if (ch == -1) { break; } os.write(ch); } socket.close(); } catch (IOException e) { System.err.println(" Connection Error: " + e); } } } catch (IOException e1) { e1.printStackTrace(); } finally { if (serverSocket != null) { serverSocket.close(); } } } }Chạy chương trình Server, ta có kết quả sau:
Tiếp tục chạy chương trình Client, ta có kết quả sau:
Xem lại cửa sổ console của Server, ta thấy kết quả như sau:
Xây dựng chương trình Server phục vụ song song
Server phục vụ song song có thể chia thành 2 phần thực hiện song song nhau:
Phần 1 (Dispatcher Thread) : Xử lý các yêu cầu nối kết. Lặp lại các công việc sau:
Lắng nghe yêu cầu nối kết của Client.
Chấp nhận một yêu cầu nối kết: Tạo kênh giao tiếp ảo mới với Client, tạo Phần 2 để xử lý các thông điệp yêu cầu của Client.
Phần 2 (Worker Thread) : Xử lý các thông điệp yêu cầu từ khách hàng.
Lặp lại các công việc sau:
Chờ nhận thông điệp yêu cầu của khách hàng.
Phân tích và xử lý yêu cầu.
Gởi thông điệp trả lời cho khách hàng.
Phần 2 sẽ kết thúc khi kênh ảo bị xóa đi.
Với mỗi Client, trên Server sẽ có một Phần 2 để xử lý yêu cầu của khách hàng. Như vậy tại một thời điểm bất kỳ luôn tồn tại 1 Phần 1 và 0 hoặc nhiều Phần 2.
Code của chương trình Server như sau:
EchoChatMultiServer.java
package com.gpcoder.tcp; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class EchoChatMultiServer { public static final int NUM_OF_THREAD = 4; public final static int SERVER_PORT = 7; public static void main(String[] args) throws IOException { ExecutorService executor = Executors.newFixedThreadPool(NUM_OF_THREAD); ServerSocket serverSocket = null; try { System.out.println("Binding to port " + SERVER_PORT + ", please wait ..."); serverSocket = new ServerSocket(SERVER_PORT); System.out.println("Server started: " + serverSocket); System.out.println("Waiting for a client ..."); while (true) { try { Socket socket = serverSocket.accept(); System.out.println("Client accepted: " + socket); WorkerThread handler = new WorkerThread(socket); executor.execute(handler); } catch (IOException e) { System.err.println(" Connection Error: " + e); } } } catch (IOException e1) { e1.printStackTrace(); } finally { if (serverSocket != null) { serverSocket.close(); } } } }WorkerThread.java
package com.gpcoder.tcp; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class WorkerThread extends Thread { private Socket socket; public WorkerThread(Socket socket) { this.socket = socket; } public void run() { System.out.println("Processing: " + socket); try { OutputStream os = socket.getOutputStream(); InputStream is = socket.getInputStream(); while (true) { int ch = is.read(); if (ch == -1) { break; } os.write(ch); } } catch (IOException e) { System.err.println("Request Processing Error: " + e); } System.out.println("Complete processing: " + socket); } }
Chạy chương trình Server, ta có kết quả sau:
Chạy liên tục 3 chương trình Client, ta có kết quả như sau:
Như bạn thấy, cả 3 chương trình Client đều được Server xử lý cùng lúc.
Xây dựng chương trình Client – Server ở chế độ không nối kết (UDP)
UDP – User Datagram Protocol : cung cấp cơ chế vận chuyển không bảo đảm và không nối kết trên mạng IP, ngược với giao thức vận chuyển tin cậy, có nối kết TCP.
Cả giao thức TCP và UDP đều phân dữ liệu ra thành các gói tin. Tuy nhiên TCP có thêm vào những tiêu đề (Header) vào trong gói tin để cho phép truyền lại những gói tin thất lạc và tập hợp các gói tin lại theo thứ tự đúng đắn. UDP không cung cấp tính năng này, nếu một gói tin bị thất lạc hoặc bị lỗi, nó sẽ không được truyền lại, và thứ tự đến đích của các gói tin cũng không giống như thứ tự lúc nó được gởi đi.
Tuy nhiên, về tốc độ, UDP sẽ truyền nhanh gấp 3 lần TCP. Cho nên chúng thường được dùng trong các ứng dụng đòi hỏi thời gian truyền tải ngắn và không cần tính chính xác cao, ví dụ truyền âm thanh, hình ảnh …
Mô hình client – server sử dụng lớp ServerSocket và Socket ở trên sử dụng giao thức TCP. Nếu muốn sử dụng mô hình client – server với giao thức UDP, ta sử dụng hai lớp java.net.DatagramSocket và java.net.DatagramPacket.
DatagramSocket được sử dụng để truyền và nhận các DatagramPacket. Dữ liệu được truyền đi là một mảng những byte, chúng được gói vào trong lớp DatagramPacket. Chiều dài của dữ liệu tối đa có thể đưa vào DatagramPacket là khoảng 60.000 byte (phụ thuộc vào dạng đường truyền). Ngoài ra DatagramPacket còn chứa địa chỉ IP và cổng của quá trình gởi và nhận dữ liệu.
Cổng trong giao thức TCP và UDP có thể trùng nhau. Trên cùng một máy tính, bạn có thể gán cổng 20 cho socket dùng giao thức TCP và cổng 20 cho socket sử dụng giao thức UDP.
Một số phương thức cần thiết để xây dựng các chương trình Client-Server sử dụng socket ở chế độ không nối kết:
public DatagramPacket(byte[] b, int n, InternetAddress ia, int port) : Phương thức này cho phép tạo một DatagramPacket chứa dữ liệu và cả địa chỉ của máy nhận dữ liệu. Phương thức trả về một đối tượng thuộc lớp DatagramePacket.
public DatagramSocket( int port) : Tạo Socket kiểu không nối kết cho Client với số hiệu cổng được xác định trong tham số (port). Nếu không xác định port, hệ thống tự động gán số hiệu cổng chưa sử dụng cho socket.
public void send(DatagramPacket dp) : Dùng để gởi một DatagramPacket đi.
public synchronized void receive(Datagrampacket dp) : Chờ nhận một DatagramPacket. Quá trình sẽ bị nghẽn cho đến khi có dữ liệu đến.
Các phương thức lấy thông tin trên một DatagramPacket nhận được:
Khi nhận được một DatagramPacket từ một quá trình khác gởi đến, ta có thể lấy thông tin trên DatagramPacket này bằng các phương thức sau:
public synchronized() InternetAddress getAddress() : Địa chỉ máy gởi.
public synchronized() int getPort() : Cổng của quá trình gởi.
public synchronized() byte[] getData() : Dữ liệu từ gói tin.
public synchronized() int getLength() : Chiều dài của dữ liệu trong gói tin.
Các phương thức đặt thông tin cho gói tin gởi:
Trước khi gởi một DatagramPacket đi, ta có thể đặt thông tin trên DatagramPacket này bằng các phương thức sau:
public synchronized() void setAddress(IntermetAddress address) : Đặt địa chỉ máy nhận.
public synchronized() void setPort(int port) : Đặt cổng quá trình nhận.
public synchronized() void setData(byte buffer[]) : Đặt dữ liệu gởi.
public synchronized() void setLength(int len) : Đặt chiều dài dữ liệu gởi.
Xây dựng chương trình Server ở chế độ không nối kết
Chương trình EchoServer cài đặt Echo Server ở chế độ không nối kết, cổng mặc định là 7. Chương trình chờ nhận từng gói tin, lấy dữ liệu ra khỏi gói tin nhận được và gởi ngược dữ liệu đó về Client.
package com.gpcoder.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class EchoServer { public final static int SERVER_PORT = 7; public final static byte[] BUFFER = new byte[4096]; public static void main(String[] args) { DatagramSocket ds = null; try { System.out.println("Binding to port " + SERVER_PORT + ", please wait ..."); ds = new DatagramSocket(SERVER_PORT); System.out.println("Server started "); System.out.println("Waiting for messages from Client ... "); while (true) { DatagramPacket incoming = new DatagramPacket(BUFFER, BUFFER.length); ds.receive(incoming); String message = new String(incoming.getData(), 0, incoming.getLength()); System.out.println("Received: " + message); DatagramPacket outsending = new DatagramPacket(message.getBytes(), incoming.getLength(), incoming.getAddress(), incoming.getPort()); ds.send(outsending); } } catch (IOException e) { e.printStackTrace(); } finally { if (ds != null) { ds.close(); } } } }
Xây dựng chương trình Client ở chế độ không nối kết
Chương trình này cho phép người sử dụng nhận các chuỗi từ bàn phím, gởi chuỗi sang EchoServer ở chế độ không nối kết ở cổng số 7, chờ nhận và in dữ liệu từ Server gởi về ra màn hình.
package com.gpcoder.udp; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class EchoClient { public final static String SERVER_IP = "127.0.0.1"; public final static int SERVER_PORT = 7; public final static byte[] BUFFER = new byte[4096]; public static void main(String[] args) { DatagramSocket ds = null; try { ds = new DatagramSocket(); System.out.println("Client started "); InetAddress server = InetAddress.getByName(SERVER_IP); while (true) { System.out.println("Enter your message: "); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String theString = br.readLine(); byte[] data = theString.getBytes(); DatagramPacket dp = new DatagramPacket(data, data.length, server, SERVER_PORT); ds.send(dp); DatagramPacket incoming = new DatagramPacket(BUFFER, BUFFER.length); ds.receive(incoming); System.out.println("Received: " + new String(incoming.getData(), 0, incoming.getLength())); } } catch (IOException e) { System.err.println(e); } finally { if (ds != null) { ds.close(); } } } }Chạy chương trình Server, ta có kết quả như sau:
Chạy chương trình Client, ta có kết quả như sau:
Tại Client, nhập nội dung message là Hello. Ta có kết quả như sau:
Tại Cient, tiếp tục nhập nội dung là How are you. Ta có kết quả như sau:
Xây dựng chương trình Client-Server nối kết theo dạng multicast (truyền theo nhóm)
Các cơ chế Socket TCP và UDP đã giới thiệu ở trên đề gọi là unicast, nghĩa là giao tiếp chỉ diễn ra giữa một máy tính gửi và một máy tính nhận.
Multicast là việc gửi quảng bá (broadcast) nhưng đến một nhóm máy tính ở cùng một địa chỉ cho trước. Địa chỉ multicast là địa chỉ lớp D được xác định trong khoảng 244.0.0.0 đến 239.255.255.255. Địa chỉ 244.0.0.0 là địa chỉ riêng nên không sử dụng được.
Multicast được sử dụng trong game nhiều người chơi, trong những ứng dụng mà đối tượng là nhiều thiết bị hay nhiều máy tính cùng nhận một loại thông tin. Multicast cũng được sử dụng trong giải thuật vạch đường (Routing Protocol), khi các router muốn cập nhật thông tin với nhau.
Java hỗ trợ Multicast thông qua lớp java.net.MulticastSocket. Một Multicast Socket là 1 DatagramSocket (UDP) có khả năng gia nhập (joining) vào một nhóm các máy tính multicast trên mạng. Khi một máy tính nào gửi thông điệp đến nhóm thì tất cả các máy tính trong đó đều nhận được.
Một số phương thức cần thiết để xây dựng các chương trình Multicast:
public MulticastSocket(int port): Tạo Socket kiểu Multicast với số hiệu cổng được xác định trong tham số (port).
public void joinGroup(InetAddress group) : Tham gia nhóm Multicast tại địa chỉ xác định.
public void leaveGroup(InetAddress group) : Rời khỏi nhóm Multicast tại địa chỉ xác định.
public void send(DatagramPacket dp) : Dùng để gởi một DatagramPacket đi. public synchronized void receive(Datagrampacket dp) : Chờ nhận một DatagramPacket.
Ví dụ:
Cài đặt một dịch vụ gởi tin nhắn trên cổng 8888, tại địa chỉ 224.0.0.1. Khi Client muốn nhận tin nhắn thì Join Group tại địa chỉ và cổng trên.
Lớp Sender
package com.gpcoder.multicast; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class MulticastSender { public static final String GROUP_ADDRESS = "224.0.0.1"; public static final int PORT = 8888; public static void main(String[] args) throws InterruptedException { DatagramSocket socket = null; try { InetAddress address = InetAddress.getByName(GROUP_ADDRESS); socket = new DatagramSocket(); DatagramPacket outPacket = null; long counter = 0; while (true) { String msg = "Sent message No. " + counter; counter++; outPacket = new DatagramPacket(msg.getBytes(), msg.getBytes().length, address, PORT); socket.send(outPacket); System.out.println("Server sent packet with msg: " + msg); Thread.sleep(1000); } } catch (IOException ex) { ex.printStackTrace(); } finally { if (socket != null) { socket.close(); } } } }Lớp Receiver
package com.gpcoder.multicast; import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; public class MulticastReceiver { public static final byte[] BUFFER = new byte[4096]; public static void main(String[] args) { MulticastSocket socket = null; DatagramPacket inPacket = null; try { InetAddress address = InetAddress.getByName(MulticastSender.GROUP_ADDRESS); socket = new MulticastSocket(MulticastSender.PORT); socket.joinGroup(address); while (true) { inPacket = new DatagramPacket(BUFFER, BUFFER.length); socket.receive(inPacket); String msg = new String(BUFFER, 0, inPacket.getLength()); System.out.println("From " + inPacket.getAddress() + " Msg : " + msg); } } catch (IOException ex) { ex.printStackTrace(); } } }
Chạy chương trình MulticastSender, sau đó start tiếp một vài chương trình MulticastReceiver. Chúng ta nhận được kết quả như sau:
Như bạn thấy, bất kỳ client nào join group đều nhận được nội dung message giống nhau, và nhận cùng thời điểm. Chương trình Multicast Server vẫn phục vụ theo dạng UDP, chỉ khác là sẽ gửi gói tin Datagram đến địa chỉ IP thuộc lớp D.
https://docs.oracle.com/javase/tutorial/networking/index.html
Giáo trình Lập trình truyền thông – Thầy Ngô Bá Hùng, Nguyễn Công Huy – Khoa CNTT&TT, Trường Đại học Cần Thơ.
Bài viết gốc được đăng tải tại gpcoder.com
Nghệ Thuật Xây Dựng Bộ Bài Trong Yu
Build deck là 1 trong những kỹ năng cơ bản nhất của người chơi, nó góp phần không nhỏ trong việc thể hiện và khẳng định bạn là ai. Nên nhớ rằng 1 deck tốt có thể góp 70% vào chiến thắng của bạn. Hãy bắt đầu build 1 deck khi đầu óc bạn đang thật sự thoải mái. Chính sự thoải mái sẽ giúp bạn sáng tạo và có những ý tưởng cho deck vô cùng độc đáo.
Ý tưởng đầu tiên “Bạn yêu thích 1 card(s) hay 1 combo, 1 chiến thuật và muốn build 1 deck xoay quanh nó.” Khởi đầu luôn luôn là như thế. Bạn yêu thích D-hero những anti-hero, bạn hãy build 1 deck về chúng. Bạn thích BEWD, hãy build 1 deck về nó Bạn thích những thiên thần, hãy build deck fairy Bạn thích không cần tấn công mà vẫn thắng, hãy build Exodia, burn… Hoặc hôm nay, bạn thấy combo của Gladiator Beast hay quá, Heraklinos thật sự mạnh mẽ, hãy build 1 deck về nó. Hay đơn giản hơn, bạn thích eff và hình dáng của những mophtronic bé nhỏ, cũng hãy build 1 deck về nó. Bạn mới bóc pack được 2 Judgment dragon, và bạn yêu thích nó, bạn muốn build deck về nó, just di it! …. Và khi bắt tay vào build deck thì bạn đừng bao giờ dừng lại hay bỏ cuộc nửa chừng cho đến khi deck hoàn thành. Đây là 1 thói quen sẽ giúp ít rất nhiều cho các bạn không chỉ trong build deck mà còn trong cuộc sống. Có những người khởi đầu rất hăng hái nhưng rồi khi gặp khó khăn lại bỏ cuộc nửa chừng.. Rồi thì bao nhiêu lý do để biện hộ cho sự chạy trốn này: “tôi không có đủ card”, “chiến thuật này quá yếu nên tôi không muốn build deck đó nữa”, “tôi không có thời gian”…hay “đã có người build rồi, tại sao tôi phải build lại trong khi có thể cc chứ…”vv.vv Điều gì sẽ xẩy ra nếu bạn bỏ cuộc 1 lần?! Nó sẽ lập lại ở nhiều lần sau đó. 2 lần, 3 lần, n lần, cuối cùng bạn vẫn chưa tự tay build được 1 deck hoàn chỉnh. Thật là vui khi tự build deck mình yêu thích và đem đi duel phải không các bạn.
Bỏ thói quen thần tượng hay quá sợ hãi 1 số card(s), chiến thuật Yêu thích khác thần tượng. Yêu thích có chiều hướng tích cực, giúp bạn nhận ra ưu và khuyết “nó”. Còn thần tượng sẽ có chiều hướng xấu hơn, bạn luôn xem “nó” là mạnh mẽ nhất, hoàn hảo nhất, và bạn sẽ không nhận ra khuyết điểm của “nó” nữa. Điều này làm hạn chế nhiều việc sáng tạo của bạn. Ngược lại, quá sợ hãi 1 chiến thuật cũng làm hạn chế khả năng của bạn. Hoặc là bạn luôn phải cố gằng tìm những card anti chiến thuật đó, càng nhiều càng tốt, hoặc là bạn tránh né chiến thuật đó, lúc nào cũng bị tâm lý là sẽ thua. Nên nhớ rằng, không có chiến thuật nào hay deck nào là mạnh nhất, là vô đối cả… Mỗi 1 thời đại sẽ có 1 số chiến thuật vượt trội hơn, imba hơn 1 số khác… tuy nhiên không phải là không thể đánh bại. Điều quan trọng nhất vẫn là con người sử dụng chiến thuật đó như thế nào.
1 lẫn nữa, hãy thoải mái và bắt tay build 1 deck hoàn chỉnh.
Thường thì có 3 cách để bắt đầu build deck: 1 là bạn bầy ra tất cả những gì mình có, rồi loai hoay chọn từng card cho vào deck và tốn khá nhiều thời gian. 2 là bạn dùng giấy viết ghi ra những ý tưởng của mình, sao cho thành 1 deck hoàn chỉnh rồi mới kiếm cards để build. 3 là dùng công cụ hỗ trợ, đơn giản nhất là YVD, rồi sau khi hoành chỉnh mới kiếm cards build.
Tuyệt Chiêu Tìm Thầu Xây Dựng, Công Ty Xây Dựng, Xây Nhà Hay Nhất
Những Tuyệt Chiêu Bỏ Túi Khi Lựa Chọn Công Ty Xây Dựng Uy Tín Với Chi Phí Thấp
Trong giai đoạn chuẩn bị xây dựng ngôi nhà của mình, gia chủ sẽ rơi vào tình trạng “khủng hoảng” thông tin bởi trước sự phát triển mạnh mẽ kinh tế thị trường cũng như nhu cầu xây dựng lớn cùng với sự phát triển của thông tin truyền thông như hiện nay có rất nhiều công ty xây dựng được ra đời. Công ty xây dựng nào cũng có những lời giới thiệu, chào mời đầy hấp dẫn với những mức chi phí khác nhau khiến cho những gia chủ rất khó khăn trong việc lựa chọn một nhà thầy uy tín và chi phí thấp. Với những lý do phía trên, bài viết này ra đời để gia chủ nắm những tuyệt chiêu chọn công ty xây dựng uy tín và chi phí thấp.
Hướng dẫn cách tìm nhà thầu, công ty xây dựng uy tín, chất lượng.
Tuyệt chiêu đầu tiên chỉ gói gọn trong hai chữ kinh nghiệm
Kinh nghiệm của một công ty xây dựng không nằm ở con số năm tồn tại mà nằm ở con số thực hiệc hiện dự án xây dựng thành công. Để có thể tìm hiểu được kinh nghiệm của công ty xây dựng gia chủ có 2 cách để thực hiện:
Cách thứ nhất, gia chủ lên mạng tìm kiếm theo tên công ty xây dựng. Nếu là một công ty uy tín sẽ có một trang web đính kèm theo tên của công ty xây dựng. Tại trang web của công ty, bạn có thể nhìn thấy ngay mục những công trình mà công ty này đã thực hiện thành công trong khoảng thời gian từ lúc thành lập cho đến ngày này. Đặc biệt với những công trình lớn, có giá trị cao chắc chắn sẽ được công ty này ghim lên vị trí đầu tiên, dễ nhìn thấy nhất. Nếu không tin tưởng về những công trình ấy gia chủ có thể ra ngoài tìm kiếm theo đúng tên mà trang web vừa đề cập để có câu trả lời chính xác nhất.
Trong trang web ấy ngoài những điều kể trên, gia chủ hoàn toàn có thể nhìn thấy được mã số doanh nghiệp, giấy phép kinh doanh mà công ty xây dựng đăng ký với cơ quan quyền lực nhà nước hiện hành. Đây là một trong những điều gia chủ hết sức lưu ý, đảm bảo sự uy tín, minh bạch.
Cách thứ hai, gia chủ có thể tìm hiểu dựa vào phản hồi mà khách hàng để lại trên trang web của công ty xây dựng hay từ dựa vào phản hồi từ chính những người thân quen, bạn bè – những người đã từng trải trực tiếp dịch vụ của các công ty rồi tiến hành lựa chọn nhà thầu phù hợp. Tại phản hổi, gia chủ ngoài những bức ảnh 3D mà nhà thầu cung cấp, gia chủ còn nhận được phản hồi thực tế xây dựng, độ hài lòng hay không hài lòng của khách hàng.
Với tuyệt chiêu đầu tiên, gia chủ có thể lựa chọn kết hợp cả hai cách thức để có thể tìm kiếm được lựa chọn được một công ty xây dựng uy tín và chi phí thấp.
Sau kinh nghiệm thì cái người quan tâm tiếp theo chính là dịch vụ
Dịch vụ tại mỗi một công ty xây dựng sẽ khác nhau cùng với đó là mức chi phí khác nhau. Ở một công ty xây dựng uy tín thì sẽ có mức giá khác nhau, trải đều các phân khúc từ thấp đến cao để gia chủ có thể lựa chọn gói thầu phù hợp với nhu cầu của chính mình. Trong chính sách dịch vụ gia chủ chú trọng đến quy trình thực hiện nhà phố chuyên nghiệp bao gồm các bước:
Tiếp nhận hồ sơ khách hàng
Tiến hành khảo sát thực tế
Thi công công trình
Bàn giao công trình
Ngoài ra, dịch vụ công ty xây dựng có thể kèm theo việc hỗ trợ thực hiện xin cấp phép xây dựng. Việc này sẽ giúp gia chủ tiết kiệm thời gian trong quá trình xây dựng nhà ở. Các bước tiến hành theo một quy trình khép kín, luôn có sự trao đổi giữa cả hai bên để đảm bảo tính kỹ thuật cũng như nét thẩm mỹ, cá tính của mỗi gia chủ.
Chi phí đầu tư được xem là yếu tố quan trọng quyết định công trình xây dựng.
Tuyệt chiêu thứ ba chính là chi phí. Khi xây dựng nhà ở, gia chủ nào cũng muốn xây dựng ngôi nhà thẩm mỹ, độ bền cao nhưng chi phí hợp lý. Nhưng không vì thế mà gia chủ lựa chọn những nơi có chi phí quá thấp so với mặt bằng chung bởi dân gian ta đã có câu: “Của rẻ là của ôi”. Chi phí rẻ đồng nghĩa với việc lựa chọn nguyên vật liệu kém chất lượng, thậm chí chí trong quá trình xây dựng xảy ra trình trạng cắt xén nguyên liệu, ảnh hưởng đến tuổi thọ công trình, thuê nhân công chi phí thấp chưa có kinh nghiệm. Không đảm bảo được tỉ mỉ trong chi tiết hoặc không xử lý tình huống kịp thời những tình huống phát sinh. Với một bên công ty xây dựng uy tín sẽ có rất nhiều mức giá nhau cho các gói.
Tại mỗi gói xây dựng sẽ có chi phí cho các đầu mục khác nhau để gia chủ so sánh với các bên khác để lựa chọn được một nhà thầu uy tín, chất lượng phù hợp với chính bản thân mình. Chú ý đến các đầu mục: Hồ sơ thiết kế, nguyên vật liệu sử dụng cho căn nhà bao gồm: nội thất và ngoại thất, hình thực lựa chọn xây dựng,….
Thời gian xây dựng là tuyệt chiêu thứ tư mà gia chủ chú ý
Lựa chọn thời gian xây dựng rất quan trọng, thời điểm hợp lý sẽ tránh được những khoản chi phí phát sinh không cần thiết cho gia chủ. Nếu như thời điểm nắng nhiều, mưa ít thì thời gian xây dựng sẽ về đúng mốc thời gian dự kiến, và không có quá trình phát sinh trong quá trình. Sau khi quyết định thời gian xây dựng, chủ thầu đưa cho gia chủ mốc thời gian dự kiến để gia chủ có thể nắm bắt được và đưa ra quyết định xây dựng phù hợp.
Tuyệt chiêu thứ năm là bản hợp đồng lao động minh bạch rõ rang
Rất nhiều gia chủ bỏ qua điều nay bởi họ cho rằng với những ngôi nhà xây dựng dân sinh thì không cần đến những giấy tờ hợp đồng. Nhưng đó là quan niệm sai lầm trước đây bởi lẽ bất kỳ một công trình xây dựng nào, quy mô lớn hay nhỏ đều phải có bản hợp đồng với điều khoản đúng như quy định của pháp luật, được thỏa thuận và ký kết giữa hai bên để đảm bảo quyền lợi.
Tuyệt chiêu thứ sáu nằm trong bản hợp đồng về chính sách và thời gian bảo hành
Thông thường chính sách này sẽ là 5 năm với xây dựng phần thô và 1 năm cho phần thi công hoàn thiện. Nếu như nhà thầu xây dựng có con số nhiều hơn hay ít hơn mức thông thường này thì hãy cẩn trọng.
Lợi Ích Của Khách Hàng Khi Lựa Chọn Được Công Ty Xây Dựng Uy Tín
Lựa chọn được một công ty xây dựng uy tín, gia chủ sẽ có rất nhiều lợi ích cho chính bản thân mình bao gồm: Tính pháp lý, tác phong làm việc, trình độ nhân sự, và giá cả dịch vụ.
Tìm được một đơn vị uy tín giúp bạn hoàn thành công trình chất lượng đúng như bạn mong muốn.
Với cam kết về chất lượng, khách hàng khi lựa chọn được một công ty xây dựng uy tín sẽ sở hữu một công trình với tuổi thọ cùng độ bền cao, được đảm bảo ngay từ khâu đầu tiên của quá trình thi công thiết kế. Thay vì để khách hàng phải tự tìm kiếm trên mạng với sự bội thực về thông tin thì ngay tại công ty xây dựng uy tín đã có ngay đội ngũ tư vấn nhiệt tình với kinh nghiệm thực chiến trên các công trình thực tế sẽ giúp cho gia chủ lựa chọn nguyên vật liệu tốt nhất với giá cả phù hợp. Sau khi xây dựng xong, công ty xây dựng lại có chính sách bảo hành từ 1 đến 5 năm để đảm bảo quyền lợi cho tất cả khách hàng sử dụng dịch vụ. Đây chính là điểm cộng rất lớn mà bất cứ khách hàng khó tính nào cũng phải gật đầu đồng ý về sự chuyên nghiệp.
Như đã nhắc đến ở trên về nguyên liệu xây dựng. Thay vì phải ra tận nơi để khảo sát, tìm kiếm rất tốn thời gian công sức của chính gia chủ nhưng thu lại không được bao nhiêu bởi chính chúng ta đều không có trình độ chuyên sâu về lĩnh vực xây dựng. Vậy hãy để công ty xây dựng uy tín lựa chọn, với kinh nghiệm mà chính bản thân họ đang làm ở công trình thực tế thì lựa chọn một nguyên vật liệu tốt không có gì là quá khó.
Tận dụng tối đa diện tích nhà ở. Đây chính là lợi ích rất được gia chủ xây dựng nhà phố rất chú trọng bởi không gian phố xá thường rất chật hẹp với đặc tính hẹp ngang, sâu dài nên để có được bản thiết kế phù hợp cần một đội ngũ kiến trúc uy tín, kinh nghiệm.
Và cũng chẳng khó gì để đơn vị xây dựng uy tín sẽ có đội ngũ pháp chế giúp bạn thực hiện các thủ tục pháp lý, cũng như xin giấy phép xây dựng một cách nhanh chóng và chuyên nghiệp.
Hướng Dẫn Tìm Kiếm Công Ty Xây Dựng Và Giám Sát Uy Tín Trên Cả Nước
Xây Dựng Số giúp chủ đầu tư thỏa sức lựa chọn công ty xây dựng uy tín với chi phí thấp nhất.
Từ những lợi ích phía trên thì chẳng còn lý do gì để không tìm kiếm một công ty xây dựng uy tín. Nhưng để có thể tìm kiếm công ty xây dựng và giám sát uy tín hiện nay thì thực sự là một bài toán khó cho bất cứ gia chủ nào đang có ý định bởi sự bùng nổ thông tin như hiện nay. Vì thế, chúng tôi đã xây dựng một sàn đấu thầu trực tuyến để hỗ trợ quý khách hàng có nhu cầu xây dựng, tìm kiếm được một đơn vị thi công uy tín – chuyên nghiệp với mức giá thấp nhất và đặc biệt sẽ có rất nhiều giải pháp phù hợp với mục đích xây dựng.
Sàn Đấu Thầu Xây Dựng Số đã hỗ trợ thành công cho hàng nghìn nhà đầu tư tìm được các đơn vị thi công uy tín, dựa vào sàn đấu thầu để kết nối trung gian giữa chủ đầu tư và các công ty xây dựng. Đặc biệt, cho phép chủ đầu tư có thể nhận được nhiều báo giá độc lập, chi tiết về chi phí xây dựng từ các nhà thầu khác nhau, để có phương án lựa chọn được đơn vị phù hợp. Ngoài ra, quý khách sẽ nhận được sự tư vấn miễn phí về cách thiết kế cũng như kết cấu công trình sao cho hiệu quả và tiết kiệm chi phí nhất.
Tất cả các công ty xây dựng khi tham gia vào Sàn Đấu Thầu Xây Dựng Số đều được công khai toàn bộ hồ sơ năng lực. Trong đó có những đánh giá khách quan từ những chủ đầu tư đã từng đăng dự án, nên bạn có thể xem và tham khảo để lựa chọn phù hợp với dự án của mình.
SÀN GIAO DỊCH THƯƠNG MẠI ĐIỆN TỬ – XÂY DỰNG SỐ
Tìm Nhà Thầu – Công Ty Xây Dựng Theo Cách Mạng Công Nghiệp 4.0
Website: htpps://xaydungso.vn/
Hotline: 03 94 95 6878
Bạn đang xem bài viết Autocad Ứng Dụng Trong Ngành Xây Dựng trên website Karefresh.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!