MỤC LỤC
Điều khác nhau căn bản ở đây là bytecode không phải là mã nhị phân của bất kỳ máy tính đang tồn tại thực tế nào mà đó là một loại mã máy kiến tạo - trung gian có thể dễ dàng dịch sang để chạy trên bất kỳ máy tính cụ thể nào. Bạn sẽ thực hiện một chương trình Java bằng cách chạy một chương trình khác gọi là Java Virtual Machine hay là JVM. Thông thường trong hầu hết các môi trường hiện tại JVM được gọi thực hiện bằng một chương trình có tên là java.
JVM đọc chương trình bằng bytecode và thông dịch hoặc biên dịch nó ra theo hệ lệnh thực tế. Các chương trình chạy được Java (Java executable) cung cấp một bộ mã nhị phân chạy trên mọi bộ xử lý.
- Máy ảo Java (chẳng qua chỉ là một cái tên mỹ miều cho bộ thông dịch) phải được triển khai cho mỗi hệ thống máy tính và sau đó mọi bytecode sẽ chạy được trên hệ thống đó. Nếu bạn sửa đổi một chương trình dịch đối với một số ngôn ngữ khác như Ada hay Visual Basic để nó sinh ra được bytecode thì bạn cũng có thể chạy bytecode đó "ngon lành" trên JVM trên bất kỳ máy tính nào. - Java có những đảm bảo tính dễ chuyển mang, bao gồm việc cung cấp cùng một giao diện người lập trình ứng dụng (API, Application Programmer Interface) trên mọi loại nền; cùng một giao diện nhị phân ứng dụng (ABI, Application Binary Interface), cụ thể là máy ảo Java, trên mọi loại nền.
Bằng cách yêu cầu rằng các toán hạng được đánh giá theo thứ tự nghiêm ngặt từ trái qua phải và qui định kích thước của tất cả các kiểu cơ bản (kiểu nguyên là 32 bit, kiểu chính xác gấp đôi là 64 bit v.v) Java đáp ứng không những tính dễ chuyển mang mà còn cả cách xử lý đồng nhất của chương trình trên các hệ thống khác nhau. Java dùng Unicode là tập ký tự chuẩn có thể biểu diễn các ký hiệu, ký tự trong hầu hết các bảng chữ cái trên thế giới, kể cả các ký tự tiếng Việt cũng như các loại chữ tượng hình của châu A'.
Tuy nhiên, những qui định chặt chẽ và chuẩn hoá của Java chính là để đảm bảo tính dễ chuyển mang và tính năng của nó trong một tương lai dài lâu. Có thể so sánh, các chương trình C++ chịu trách nhiệm quản lý các đống (heap) bộ nhớ của riêng chúng do vậy chúng phải có mã dài hơn, mất nhiều thời gian gỡ rối hơn và các chương trình lớn thường dẫn tới các lỗi rất khó phát hiện và xử lý về việc dọn dẹp bộ nhớ.
Khi nâng cấp hoặc thay đổi applet của mình bạn chỉ việc đưa phiên bản mới của applet lên trang web và thế là trong lần truy nhập sau đó các client sẽ được cập nhật một cách tự động. Các vấn đề đau đầu liên quan đến phân phối phần mềm như làm thế nào để cài đặt hay cập nhật các phiên bản cho một loạt các máy tính có thể giải quyết dễ dàng theo cách này.
-Một chương trình viết bằng ngôn ngữ Java có thể chạy trên nhiều máy tính có hệ điều hành khác nhau (Windows, Unix,Linux, …) miễn sao ở đó có cài đặt máy ảo java (Java Virtual Machine). Tất cả mọi thứ đề cập đến trong Java đều liên quan đến các đối tượng được định nghĩa trước, thậm chí hàm chính của một chương trình viết bằng Java (đó là hàm main) cũng phải đặt bên trong một lớp. Hướng đối tượng trong Java không có tính đa kế thừa (multi inheritance) như trong C++ mà thay vào đó Java đưa ra khái niệm interface để hỗ trợ tính đa kế thừa.
-Chương trình ứng dụng viết bằng ngôn ngữ Java chỉ cần chạy được trên máy ảo Java là có thể chạy được trên bất kỳ máy tính, hệ điều hành nào có máy ảo Java. -Công nghệ Java phát triển mạnh mẽ nhờ vào “đại gia Sun Microsystem” cung cấp nhiều công cụ, thư viện lập trình phong phú hỗ trợ cho việc phát triển nhiều loại hình ứng dụng khác nhau cụ thể như: J2SE (Java 2 Standard Edition) hỗ trợ phát triển những ứng dụng đơn, ứng dụng client-server; J2EE (Java 2 Enterprise Edition) hỗ trợ phát triển các ứng dụng thương mại, J2ME (Java 2 Micro Edition) hỗ trợ phát triển các ứng dụng trên các thiết bị di động, không dây, ….
+ socket được định nghĩa trong hệ điều hành bằng một cấu trúc, được xem như điểm nối để hai procceses giao tiếp với nhau. + Cấu trúc socket gồm 5 field được mô tả như hình trong hình, trong đó * Family : xác định protocol group. * Local Socket Address và Remote Socket Address : là địa chỉ socket của process cục bộ và từ xa.
* Raw Socket: dùng cho một số protocol của một số ứng dụng đặc biệt, dùng các dịch vụ trực tiếp của lớp IP. - Chấp nhận kết nối từ client, đọc dữ liệu từ client gởi đến, xử lý và gởi trả kết quả cho client theo đúng giao thức lớp ứng dụng đã thiết kế.
Lớp tạo kết nối đến máy chủ, nó đóng gói tất cả các thông tin truyền đến server và với các đối thủ. Server Connection làm cả hai nhiệm vụ, lắng nghe dữ liệu nhập, phân tích chúng sau đó giao cho CaroClient xử lý và xuất dữ liệu khi có yêu cầu. Khi đã kết nối chơi thành công, máy chủ sẽ cấp cho máy khách một số id, id này là duy nhất.
Máy chủ và các máy khách giao tiếp với nhau thông qua các chuỗi bắt đầu bằng các từ khóa. Khi nhận được chuỗi gởi tới, server hoặc client sẽ phân tích từ khóa ở đầu chuỗi và các tham số được kèm theo để thực hiện công việc tương ứng. “add”: Thêm người chơi tham gia vào mạng, tham số kèm theo là id và tên của người tham gia.
“delete”: Có người chơi thoát khỏi mạng, tham số kèm theo là id của người cần xóa. “chat”: Có người chat với mình, tham số kèm theo là id của người chat và lời chat. “turn”: Người chơi với mình đã đi một nước, tham số kèm theo là tọa độ của nước vừa đi.
“challenge”: Có người thách đấu, tham số kèm theo là id của ngưòi thách đấu và tham số first có nghĩa là người đó có muốn đi trước hay không. Và một số từ khóa khác điều khiển việc xem ván cờ đang đánh và xem lại ván cờ đã lưu. Là một JFrame có nhiệm vụ tạo một khung để chứa các thành phần của chương trình, khung có một thanh trạng thái statusBar để hiện trạng thái của chương trình.
Nói chung khi cần thực hiện công việc lại gần như từ đầu thì gọi hàm nameEntered(name) với name là tên của mình. Nhiệm vụ của nó là quản lý tất cả các công việc nhập và xuất từ một client. Lớp cũng có một bảng các từ khóa được qui định trước giống như lớp ServerConnection.
Gomoku là bàn cờ logic, có nhiệm vụ lưu các nước cờ đã đi và xử lý thắng thua.
- Thư mục images chứa hình ảnh của bàn cờ phải nằm chung thư mục với 2 tập tin trên, nếu không giao diện bàn cờ sẽ hiện không đẹp. -Chương trình có sử dụng cơ sở dữ liệu để lưu các ván cờ, trước khi chạy chương trình bạn cần phải tạo ODBC Data Source cho chương trình trong System DSN. -Mở Data Source (ODBC) trong Programs\Administrative Tools (Windows 2000/XP), hoặc trong Control Panel (Windows 9x).
Chương trình gồm 2 tập tin Server.exe (chương trình chạy phía máy chủ) và Caro.exe (chương trình chạy phía máy khách). - Nếu chương trình hiện dòng thông báo “Server listening on port 2009” thì máy chủ đã chạy thành công. Máy chủ chạy dưới chế độ nền, bây giờ các máy khách có thể nối kết đến máy chủ để chơi cờ.
- Nhập địa chỉ máy chủ nếu máy chủ là máy ở xa, nếu máy chủ chính là máy khách bạn không cần nhập địa chỉ máy chủ. - Khi chương trình báo đã kết nối thành công, bạn nhập tên của mình vào để tham gia vào mạng. - Bạn có thể chọn đối thủ đang ở trên mạng để thách đấu chơi cờ, hoặc xem các ván cờ đang đấu và xem lại các ván cờ đã lưu bằng cách chọn các radio button tương ứng và theo hướng dẫn của chương trình.
Có thể chạy chiều chương trình Caro.exe trên cùng một máy, mỗi chương trình sẽ được xem là một người chơi khác nhau. - Sau một thời gian tìm hiểu về lập trình mạng và ngôn ngữ lập trình Java em đã đạt được một số kết quả như: chương trỡnh minh họa rừ cỏch kết nối kiểu Client/Server, giao diện đơn giản, dễ sử dụng, chương trình chạy ổn định, xử lý được các trường hợp dễ gây ra lỗi như hai người thách đấu một người cùng một lúc, người đang chơi thoát ra giữa chừng. Bên cạnh đó đó thời gian có hạn nên chương trình còn có nhiều thiếu sót như: chưa có phần người chơi đánh với máy tính, chưa có phần tính điểm và xếp hạng người chơi, giao diện tuy dễ sử dụng nhưng chưa đẹp nên cần phải cải tiến, tốc độ hiện thị bàn cờ chậm.