1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO cáo CHI TIẾT lập TRÌNH MẠNG đề tài SOCKET FOR CLIENTS

90 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

TRƯỜNG ĐẠI HỌC KIẾN TRÚC HÀ NỘI KHOA CÔNG NGHỆ THƠNG TIN BÁO CÁO CHI TIẾT LẬP TRÌNH MẠNG Đề tài : SOCKET FOR CLIENTS SOCKET FOR SERVERS Thành viên nhóm : Nguyễn Thị Thùy Linh 1855010094 Hồng Trung Công 1855010013 Nguyễn Văn An 1855010001 Nguyễn Mạnh Thắng 1855010172 Giảng viên hướng dẫn : ThS Nguyễn Mạnh Hùng HÀ NỘI, 6/2021 Mục Lục CHƯƠNG I: SOCKET FOR CLIENTS 1.1 Sử dụng socket 1.1.1 Điều tra giao thức với Telnet 1.1.2 Đọc từ máy chủ có socket 1.1.3 Viết vào máy chủ có socket 18 1.2 Xây dựng kết nối socket .26 1.2.1 Nhà xây dựng .26 1.2.2 Xây dựng mà không cần kết nối .29 1.2.3 Địa socket 31 1.2.4 Máy chủ Proxy .32 1.3 Nhận thông tin socket 34 1.3.1 Đã đóng Đã kết nối? 36 1.4 Tùy chọn cài đặt socket 38 1.5 Ngoại lệ socket 38 1.6 Socket ứng dụng GUI 39 1.6.1 Whois .40 1.6.2 A netwworl client library .43 CHƯƠNG II: SOCKET FOR SERVERS .51 2.1 Sử dụng ServerSockets 51 2.1.1 Phục vụ liệu nhị phân 57 2.1.2 Máy chủ đa luồng 58 2.1.3 Viết vào máy chủ có socket 62 2.1.4Đóng socket Máy chủ .63 2.2 Đăng nhập .66 2.2.1 what to log .66 2.2.2 Cách đăng nhập 67 2.3 Xây dựng server socket 70 2.3.1 Xây dựng mà khơng có ràng buộc 72 2.4 Lấy thông tin server socket 74 2.5 Tùy chọn socket 75 2.5.1 SO_TIMEOUT 75 2.5.2 SO_REUSEADDR 76 2.5.3 SO_RCVBUF 76 2.5.4 Lớp dịch vụ 78 2.6 Máy chủ HTTP 79 2.6.1 Máy chủ Một Tệp 80 2.6.2 Bộ chuyển hướng 84 2.6.3 Máy chủ HTTP thức .86 CHƯƠNG I: SOCKET FOR CLIENTS Dữ liệu truyền qua Internet gói có kích thước hữu hạn gọi datagrams Mỗi datagram chứa tiêu đề tải trọng Tiêu đề chứa địa cổng mà gói tin đi, địa cổng mà gói tin đến, séc để phát tham nhũng liệu nhiều thông tin vệ sinh khác sử dụng để đảm bảo truyền tải đáng tin cậy Tải trọng chứa liệu Tuy nhiên, datagram có độ dài hữu hạn, nên thường cần phải chia liệu nhiều gói lắp ráp lại điểm đến Cũng có ó thể bị bị hỏng trình vận chuyển cần phải truyền lại gói đến ngồi trật tự cần phải xếp lại Theo dõi điều - chia liệu thành gói, tạo tiêu đề, phân tích tiêu đề gói đến, theo dõi gói chưa nhận, v.v - nhiều công việc đòi hỏi nhiều mã phức tạp May mắn thay, bạn khơng cần phải tự thực cơng việc Socket cho phép lập trình viên xử lý kết nối mạng luồng khác mà byte viết từ đọc byte Socket bảo vệ lập trình viên khỏi chi tiết cấp thấp mạng, chẳng hạn phát lỗi, kích thước gói, tách gói, truyền lại gói, địa mạng 1.1 Sử dụng socket Socket kết nối hai máy chủ Nó thực bảy thao tác bản: • Kết nối với máy từ xa • Gửi liệu • Nhận liệu • Đóng kết nối • Liên kết với cổng • Lắng nghe liệu đến • Chấp nhận kết nối từ máy từ xa cổng ràng buộc Lớp Socket Java , sử dụng khách hàng máy chủ, có phương pháp tương ứng với bốn hoạt động số Ba thao tác cuối cần thiết máy chủ, chờ khách hàng kết nối với họ Chúng thực lớp ServerSocket, thảo luận chương Các chương trình Java thường sử dụng socket máy khách theo cách sau: • Chương trình tạo socket với constructor • Socket cố gắng kết nối với máy chủ từ xa Khi kết nối thiết lập, máy chủ cục từ xa nhận luồng đầu vào đầu từ socket sử dụng luồng để gửi liệu cho Kết nối full-duplex Cả hai máy chủ gửi nhận liệu lúc Dữ liệu có nghĩa phụ thuộc vào giao thức; lệnh khác gửi đến máy chủ FTP so với máy chủ HTTP Thơng thường có số bắt tay thỏa thuận, việc truyền liệu từ sang khác Khi việc truyền liệu hoàn tất, hai bên đóng kết nối Một số giao thức, chẳng hạn HTTP 1.0, yêu cầu kết nối phải đóng sau yêu cầu phục vụ Những người khác, chẳng hạn FTP HTTP 1.1, cho phép nhiều yêu cầu xử lý kết nối 1.1.1 Điều tra giao thức với Telnet Trong chương này, bạn thấy khách hàng sử dụng socket để giao tiếp với số dịch vụ Internet biết đến thời gian, sắc lệnh Bản thân socket đủ đơn giản; nhiên, giao thức để giao tiếp với máy chủ khác làm cho sống trở nên phức tạp Để có cảm giác cách giao thức hoạt động, bạn sử dụng Telnet để kết nối với máy chủ, nhập lệnh khác cho xem phản hồi Theo mặc định, Telnet cố gắng kết nối với cổng 23 Để kết nối với máy chủ cổng khác nhau, định cổng bạn muốn kết nối sau: $ telnet localhost 25 Điều yêu cầu kết nối với cổng 25, cổng SMTP, máy cục bộ; SMTP giao thức sử dụng để chuyển email máy chủ máy khách thư máy chủ Nếu bạn biết lệnh để tương tác với máy chủ SMTP, bạn gửi email mà khơng cần thơng qua chương trình thư Thủ thuật sử dụng để giả mạo email Ví dụ, vài năm trước, sinh viên mùa hè Đài quan sát lượng mặt trời quốc gia Sunspot, New Mexico, làm cho xuất bữa tiệc mà nhà khoa học ném sau trận đấu bóng chuyền hàng năm nhân viên sinh viên thực tế bữa tiệc chiến thắng cho sinh viên (Tất nhiên, tác giả sách hồn tồn khơng liên quan đến hành vi đê hèn vậy.;-) ) Sự tương tác với máy chủ SMTP diễn này; nhập loại người dùng hiển thị in đậm (tên thay đổi để bảo vệ người tin): Một số nhân viên hỏi Bart anh ta, nhân viên, lại tổ chức bữa tiệc chiến thắng cho sinh viên Đạo đức câu chuyện bạn không nên tin tưởng email, đặc biệt email vô lý này, mà khơng có xác minh độc lập Trong 20 năm kể từ điều xảy ra, hầu hết máy chủ SMTP thêm chút bảo mật so với hiển thị Họ có xu hướng yêu cầu tên người dùng mật khẩu, chấp nhận kết nối từ khách hàng mạng cục máy chủ thư đáng tin cậy khác Tuy nhiên, bạn sử dụng Telnet để mô máy khách, xem máy khách máy chủ tương tác tìm hiểu xem chương trình Java bạn cần làm Mặc dù phiên khơng chứng minh tất tính giao thức SMTP, đủ phép bạn suy luận cách ứng dụng email đơn giản nói chuyện với máy chủ 1.1.2 Đọc từ máy chủ có socket Hãy bắt đầu với ví dụ đơn giản Bạn kết nối với máy chủ ban ngày Viện Tiêu chuẩn Cơng nghệ Quốc gia (NIST) u cầu cho thời điểm Giao thức định nghĩa RFC 867 Đọc điều đó, bạn thấy máy chủ ban ngày nghe cổng 13 máy chủ gửi thời gian định dạng đọc người đóng kết nối Bạn kiểm tra máy chủ ban ngày với Telnet này: Dòng "56375 13-03-24 13:37:50 50 888.8 UTC (NIST)" gửi máy chủ ban ngày Khi bạn đọc InputStream Socket, bạn nhận Các dòng khác sản xuất vỏ Unix chương trình Telnet RFC 867 khơng định định dạng cụ thể cho đầu ngồi việc đọc người Trong trường hợp này, bạn thấy kết nối thực vào ngày 24 tháng năm 2013, lúc 1:37: 50 P.M., Greenwich Meantime Cụ thể hơn, định dạng định nghĩa JJJJJ YY-MM-DD HH:MM:SS TT L H msADV UTC(NIST) OTM đó: • JJJJJ "Ngày Julian sửa đổi" (tức là, số ngày kể từ nửa đêm ngày 17 tháng 11 năm 1858) • YY-MM-DD hai chữ số cuối năm, tháng ngày tháng • HH: MM: SS thời gian tính giờ, phút giây Giờ phối hợp toàn cầu (UTC, Giờ trung bình Greenwich) • TT cho biết liệu Hoa Kỳ tuân thủ chuẩn hay tiết kiệm ánh sáng ban ngày: 00 có nghĩa thời gian tiêu chuẩn; 50 có nghĩa thời gian tiết kiệm ánh sáng ban ngày Các giá trị khác đếm ngược số ngày chuyển đổi • L mã có chữ số cho biết liệu giây nhuận thêm trừ vào nửa đêm vào ngày cuối tháng tại: cho khơng có giây nhuận, để thêm giây nhuận để trừ giây nhuận • H đại diện cho sức khỏe máy chủ: có nghĩa khỏe mạnh, có nghĩa lên đến giây tắt, có nghĩa giây tắt, có nghĩa số lượng khơng xác khơng xác định, chế độ bảo trì • msADV số mili giây mà NIST thêm vào thời gian gửi để bù đắp cho chậm trễ mạng Trong mã trước, bạn thấy thêm 888,8 mili giây vào kết này, thời gian ước tính để phản hồi trở lại • Chuỗi UTC (NIST) số, OTM gần số (một dấu hoa thị trừ có điều thực kỳ lạ xảy ra) Những chi tiết NIST cụ thể Chúng phần tiêu chuẩn ban ngày Mặc dù chúng cung cấp nhiều liệu, bạn có nhu cầu lập trình thực để đồng hóa với máy chủ thời gian mạng, bạn nên sử dụng giao thức NTP xác định RFC 5905 thay Tôi không ví dụ hoạt động hiển thị Các máy chủ bị tải gặp cố liên tục kết nối viết chương Vào đầu năm 2013, NISTđã đưa danh từ, "Người dùng giao thức NIST DAYTIME cổng TCP 13 khuyến khích mạnh mẽ để nâng cấp lên giao thức thời gian mạng, cung cấp độ xác cao u cầu băng thơng mạng Máy khách thời gian NIST (nistime-32bit.exe) hỗ trợ hai giao thức Chúng hy vọng thay phiên tcp giao thức phiên udpbased gần cuối năm 2013" Tôi cho bạn cách truy cập dịch vụ qua UDP Chương 11 Bây xem làm để truy xuất liệu tương tự theo chương trình cách sử dụng socket Đầu tiên, mở socket để time.nist.gov cổng 13: Điều không tạo đối tượng Nó thực làm cho kết nối mạng Nếu kết nối hết thời gian thất bại máy chủ khơng nghe cổng 13, người xây dựng ném IOException, bạn thường bọc điều khối thử Trong Java 7, Socket triển khai Autocloseable để bạn sử dụng try-withresources: Trong Java trở trước, bạn muốn đóng rõ ràng socket khối cuối để giải phóng tài nguyên mà socket nắm giữ: 2.5 Tùy chọn socket Tùy chọn socket định cách socket gốc mà lớp ServerSocket dựa vào gửi nhận liệu Đối với socket máy chủ, Java hỗ trợ ba tùy chọn: • SO_TIMEOUT • SO_REUSEADDR • SO_RCVBUF Nó cho phép bạn đặt tùy chọn hiệu suất cho gói socket 2.5.1 SO_TIMEOUT SO_TIMEOUT lượng thời gian, tính mili giây, chấp nhận () chờ kết nối đến trước ném java.io.InterruptedIOException Nếu SO_TIMEOUT 0, chấp nhận () không hết thời gian Mặc định không hết thời gian Thiết lập SO_TIMEOUT khơng phổ biến Bạn cần bạn thực giao thức phức tạp an tồn địi hỏi nhiều kết nối máy khách máy chủ, nơi phản hồi cần thiết để xảy khoảng thời gian cố định Tuy nhiên, hầu hết máy chủ thiết kế để chạy khoảng thời gian không xác định sử dụng giá trị thời gian chờ mặc định, (không hết thời gian) Nếu bạn muốn thay đổi điều này, phương pháp setSoTi meout() đặt trường SO_TIMEOUT cho đối tượng socket máy chủ này: Đếm ngược bắt đầu chấp nhận () gọi Khi hết thời gian chờ, ac cept() ném SocketTimeoutException, lớp IOException Bạn cần đặt tùy chọn trước gọi chấp nhận(); bạn thay đổi giá trị thời gian chờ ac cept() chờ kết nối Đối số thời gian chờ phải lớn 0; không, phương pháp ném IllegalArgumentException 2.5.2 SO_REUSEADDR Tùy chọn SO_REUSEADDR cho socket máy chủ giống với tùy chọn tương tự cho socket máy khách, thảo luận chương trước Nó xác định xem socket phép liên kết với cổng sử dụng trước có liệu qua mạng gửi đến socket cũ Như bạn mong đợi, có hai phương pháp để có thiết lập tùy chọn này: Giá trị mặc định phụ thuộc vào tảng Đoạn mã xác định giá trị mặc định cách tạo ServerSocket sau gọi getReuseAddress(): Trên hộp Linux Mac OS X nơi thử nghiệm mã này, socket máy chủ tái sử dụng theo mặc định 2.5.3 SO_RCVBUF Tùy chọn SO_RCVBUF đặt kích thước đệm nhận mặc định cho socket máy khách socket máy chủ chấp nhận Nó đọc viết hai phương pháp sau: Cài đặt SO_RCVBUF socket máy chủ giống gọi setReceiveBufferSize() socket riêng lẻ trả chấp nhận () (ngoại trừ việc bạn khơng thể thay đổi kích thước đệm nhận sau socket chấp nhận) Nhớ lại từ chương trước tùy chọn gợi ý giá trị cho kích thước gói IP riêng lẻ luồng Các kết nối nhanh muốn sử dụng đệm lớn hơn, hầu hết thời gian giá trị mặc định tốt Bạn đặt tùy chọn trước sau socket máy chủ bị ràng buộc, trừ bạn muốn đặt kích thước đệm nhận lớn 64K Trong trường hợp đó, bạn phải đặt tùy chọn ServerSocket khơng bị ràng buộc trước ràng buộc 2.5.4 Lớp dịch vụ Như bạn biết chương trước, loại dịch vụ Internet khác có nhu cầu hiệu suất khác Ví dụ, phát trực tiếp video thể thao cần băng thông tương đối cao Mặt khác, phim cần băng thơng cao chịu độ trễ độ trễ cao Email truyền qua kết nối băng thơng thấp chí giữ vài mà không gây hại lớn Bốn lớp giao thơng chung xác định cho TCP: • Chi phí thấp • Độ tin cậy cao • Thơng lượng tối đa • Độ trễ tối thiểu Các lớp lưu lượng truy cập yêu cầu cho Socket định Ví dụ: bạn u cầu độ trễ tối thiểu có sẵn với chi phí thấp Các biện pháp mờ nhạt tương đối, không đảm bảo dịch vụ Không phải tất định tuyến ngăn xếp TCP gốc hỗ trợ lớp Phương pháp setPerformancePreferences() thể ưu tiên tương đối dành cho thời gian kết nối, độ trễ băng thông cho socket chấp nhận máy chủ này: Ví dụ: cách đặt kết nối Thời gian đến 2, độ trễ đến băng thông thành 3, bạn băng thông tối đa đặc điểm quan trọng nhất, độ trễ tối thiểu quan trọng thời gian kết nối giữa: ss setPerformancePreferences(2, 1, 3); Chính xác làm VM thực điều phụ thuộc vào việc thực Việc thực socket không bắt buộc phải tôn trọng yêu cầu số Họ cung cấp gợi ý cho ngăn xếp TCP sách mong muốn Nhiều triển khai bao gồm Android bỏ qua giá trị hoàn toàn 2.6 Máy chủ HTTP Phần hiển thị số máy chủ HTTP khác mà bạn xây dựng với socket máy chủ, máy có mục đích đặc biệt khác máy chủ phức tạp chút so với trước HTTP giao thức lớn Như bạn thấy Chương 5, máy chủ HTTP đầy đủ tính phải trả lời yêu cầu tệp, chuyển đổi URL thành tên tệp hệ thống cục bộ, trả lời yêu cầu POST GET, xử lý yêu cầu tệp không tồn tại, giải thích loại MIME nhiều, nhiều Tuy nhiên, nhiều máy chủ HTTP không cần tất tính Ví dụ: nhiều trang web đơn giản hiển thị thông báo "đang xây dựng" Rõ ràng, Apache mức cần thiết cho trang web Một trang web ứng cử viên cho máy chủ tùy chỉnh làm điều Thư viện lớp mạng Java làm cho việc viết máy chủ đơn giản gần tầm thường Máy chủ tùy chỉnh khơng hữu ích cho trang web nhỏ Các trang web có lưu lượng truy cập cao Yahoo! ứng cử viên cho máy chủ tùy chỉnh máy chủ làm việc thường nhanh nhiều so với máy chủ đa Apache Microsoft IIS Thật dễ dàng để tối ưu hóa máy chủ mục đích đặc biệt cho nhiệm vụ cụ thể; kết thường hiệu nhiều so với máy chủ đa cần đáp ứng nhiều loại yêu cầu khác Ví dụ: biểu tượng hình ảnh sử dụng nhiều lần nhiều trang trang có lưu lượng truy cập cao xử lý tốt máy chủ đọc tất tệp hình ảnh vào nhớ khởi động sau phục vụ chúng trực tiếp khỏi RAM, thay phải đọc chúng khỏi đĩa cho yêu cầu Hơn nữa, máy chủ tránh lãng phí thời gian vào việc ghi nhật ký bạn không muốn theo dõi yêu cầu hình ảnh riêng biệt với yêu cầu cho trang mà chúng bao gồm Cuối cùng, Java ngôn ngữ tồi cho máy chủ web đầy đủ tính nhằm cạnh tranh với apache IIS Ngay bạn tin chương trình Java chuyên sâu CPU chậm chương trình C C ++ chuyên sâu CPU (điều mà nghi ngờ máy ảo đại), hầu hết máy chủ HTTP bị giới hạn băng thông mạng độ trễ, khơng phải tốc độ CPU Do đó, lợi khác Java, chẳng hạn chất nửa biên dịch / nửa giải thích nó, tải lớp động, thu gom rác bảo vệ nhớ thực có hội tỏa sáng Đặc biệt, trang web sử dụng nhiều nội dung động thông qua servlets, trang PHP chế khác thường chạy nhanh nhiều cài đặt lại máy chủ web Java túy chủ yếu túy Thật vậy, có số máy chủ web sản xuất viết Java, chẳng hạn Jetty Eclipse Foundation Nhiều máy chủ web khác viết C bao gồm thành phần Java đáng kể để hỗ trợ API Java Servlet Java Server Pages Chúng phần lớn thay CGIs truyền thống, ASP phía máy chủ bao gồm, chủ yếu tương đương Java nhanh tốn tài ngun Tơi khơng khám phá cơng nghệ chúng dễ dàng xứng đáng có sách riêng họ Tôi giới thiệu độc giả quan tâm đến Chương trình Java Servlet Jason Hunter (O'Reilly) Tuy nhiên, điều quan trọng cần lưu ý máy chủ nói chung máy chủ web nói riêng lĩnh vực mà Java thực cạnh tranh với C hiệu suất giới thực 2.6.1 Máy chủ Một Tệp Cuộc điều tra máy chủ HTTP bắt đầu với máy chủ gửi tệp, yêu cầu Nó gọi SingleFileHTTPServer hiển thị Ví dụ 9-10 Tên tệp, cổng cục mã hóa nội dung đọc từ dòng lệnh Nếu cổng bị bỏ qua, cổng 80 giả định Nếu mã hóa bị bỏ qua, ASCII giả định Ví dụ 9-10 Một máy chủ HTTP phục vụ tệp Các nhà xây dựng thiết lập liệu gửi với tiêu đề HTTP bao gồm thông tin độ dài nội dung mã hóa nội dung Tiêu đề thể phản ứng lưu trữ mảng byte mã hóa mong muốn để chúng thổi cho khách hàng nhanh chóng Lớp SingleFileHTTPServer giữ nội dung cần gửi, tiêu đề cần gửi cổng để ràng buộc Phương pháp start() tạo ServerSocket cổng định, sau vào vịng lặp vơ hạn liên tục chấp nhận kết nối xử lý chúng Mỗi socket đến xử lý đối tượng Handler chạy gửi đến nhóm chủ đề Do đó, khách hàng chậm chạp khơng thể bỏ đói khách hàng khác Mỗi Handler nhận InputStream từ mà đọc yêu cầu khách hàng Nó nhìn vào dịng để xem liệu có chứa chuỗi HTTP hay khơng Nếu nhìn thấy chuỗi này, máy chủ giả định máy khách hiểu HTTP/1.0 trở lên gửi tiêu đề MIME cho tệp; Sau gửi liệu Nếu yêu cầu máy khách không chứa chuỗi HTTP, máy chủ bỏ qua tiêu đề, tự gửi liệu Cuối cùng, người xử lý đóng kết nối Phương pháp () đọc tham số từ dòng lệnh Tên tệp phục vụ đọc từ đối số dòng lệnh Nếu khơng có tệp định tệp mở được, thông báo lỗi in chương trình Giả sử tệp đọc, nội dung đọc vào liệu mảng byte cách sử dụng lớp Đường dẫn Tệp giới thiệu Java Lớp URLConnection đưa dự đoán hợp lý loại nội dung tệp đoán lưu trữ biếnType nội dung Tiếp theo, số cổng đọc từ đối số dòng lệnh thứ hai Nếu khơng có cổng định đối số thứ hai số nguyên từ đến 65.535, cổng 80 sử dụng Mã hóa đọc từ đối số dịng lệnh thứ ba, có Nếu khơng, UTF-8 giả định Sau đó, giá trị sử dụng để xây dựng đối tượng SingleFileHTTPServer bắt đầu Phương pháp () giao diện Bạn dễ dàng sử dụng lớp học phần số chương trình khác Nếu bạn thêm phương pháp setter để thay đổi nội dung, bạn dễ dàng sử dụng để cung cấp thông tin trạng thái đơn giản máy chủ hệ thống chạy Tuy nhiên, điều đặt số vấn đề bổ sung an tồn luồng mà Ví dụ 9-10 khơng phải giải liệu bất biến Dưới bạn thấy bạn kết nối với máy chủ thông qua Telnet (các chi tiết cụ thể phụ thuộc vào máy chủ tệp xác): 2.6.2 Bộ chuyển hướng Redirection ứng dụng đơn giản hữu ích khác cho máy chủ HTTP có mục đích đặc biệt Trong phần này, bạn phát triển máy chủ chuyển hướng người dùng từ trang web sang trang web khác - ví dụ: từ cnet.com đến www.cnet.com Ví dụ 9-11 đọc URL số cổng từ dòng lệnh, mở socket máy chủ cổng chuyển hướng tất yêu cầu mà nhận đến trang web định URL mã 302 FOUND Trong ví dụ này, tơi chọn sử dụng chủ đề thay nhóm chủ đề cho kết nối Điều có lẽ đơn giản chút để viết mã hiểu có phần hiệu Tuy nhiên, bạn kết nối với trình duyệt web, bạn nên gửi đến http://www.cafeconleche.org/ với chậm trễ nhỏ Bạn không nên thấy HTML thêm vào sau mã phản hồi; điều cung cấp để hỗ trợ trình duyệt cũ khơng tự động chuyển hướng, vài hoang tưởng bảo mật cấu hình trình duyệt họ khơng tự động chuyển hướng Phương pháp () cung cấp giao diện đơn giản đọc URL trang web để chuyển hướng kết nối đến cổng cục để nghe Nó sử dụng thơng tin để xây dựng đối tượng Redirector Sau đó, gọi bắt đầu() Nếu cổng không định, Redirector nghe cổng 80 Nếu trang web bị bỏ qua, Redirector in thơng báo lỗi Phương pháp khởi động () Redirector liên kết socket máy chủ với cổng, in thông báo trạng thái ngắn sau vào vịng lặp vơ hạn lắng nghe kết nối Mỗi kết nối chấp nhận, đối tượng Socket kết sử dụng để xây dựng Redi rectThread RedirectThread sau bắt đầu Tất tương tác với khách hàng diễn chủ đề Phương pháp bắt đầu () sau cần chờ kết nối đến Phương pháp chạy () RedirectThread thực hầu hết cơng việc Nó bắt đầu cách xích Nhà văn vào luồng đầu Socket Đầu đọc vào luồng đầu vào Socket Cả đầu vào đầu đệm Sau đó, phương pháp chạy () đọc dòng mà khách hàng gửi Mặc dù khách hàng gửi tồn tiêu đề MIME, bạn bỏ qua điều Dịng chứa tất thơng tin bạn cần Dịng trơng giống này: NHẬN /directory/filename.html HTTP/1.0 Có thể từ POST PUT thay khơng có phiên HTTP "Từ" thứ hai tệp mà khách hàng muốn truy xuất Điều phải bắt đầu dấu gạch chéo (/) Trình duyệt chịu trách nhiệm chuyển đổi URL tương đối thành URL tuyệt đối bắt đầu dấu cắt; Server không làm điều Từ thứ ba phiên giao thức HTTP mà trình duyệt hiểu Các giá trị khơng (trình duyệt trước HTTP/1.0), HTTP/1.0 HTTP/1.1 Để xử lý yêu cầu này, Redirector bỏ qua từ Từ thứ hai đính kèm với URL máy chủ đích (được lưu trữ trường newSite) để cung cấp URL chuyển hướng đầy đủ Từ thứ ba sử dụng để xác định xem có nên gửi tiêu đề MIME hay không; Tiêu đề MIME không sử dụng cho trình duyệt cũ khơng hiểu HTTP/1.0 Nếu có phiên bản, tiêu đề MIME gửi; khơng, bị bỏ qua Gửi liệu gần tầm thường Tác giả sử dụng Bởi tất liệu bạn gửi ASCII túy, mã hóa xác khơng q quan trọng Mẹo ký tự cuối dòng cho yêu cầu HTTP \r\n–a carriage return theo sau linefeed Các dòng dòng gửi dòng văn cho khách hàng Dòng in là: TÌM THẤY HTTP/1.0 302 Đây mã phản hồi HTTP / 1.0 cho khách hàng biết mong đợi chuyển hướng Dòng thứ hai Date: tiêu đề cung cấp thời gian tại máy chủ Dòng tùy chọn Dòng thứ ba tên phiên máy chủ; dòng tùy chọn sử dụng nhện cố gắng giữ số liệu thống kê máy chủ web phổ biến Dịng Vị trí: tiêu đề, yêu cầu cho loại phản hồi Nó cho khách hàng biết nơi chuyển hướng đến Cuối loại Nội dung tiêu chuẩn: tiêu đề Bạn gửi văn bản/html kiểu nội dung để khách hàng nên mong đợi để xem HTML Cuối cùng, dòng trống gửi để biểu thị kết thúc liệu tiêu đề Tất thứ sau HTML, xử lý trình duyệt hiển thị cho người dùng Một vài dịng in thơng báo cho trình duyệt khơng hỗ trợ chuyển hướng, người dùng tự nhảy đến trang web Thơng điệp trơng giống như: 2.6.3 Máy chủ HTTP thức Đủ máy chủ HTTP chuyên dụng Phần phát triển máy chủ HTTP toàn diện, gọi JHTTP, phục vụ tồn tài liệu, bao gồm hình ảnh, applet, tệp HTML, tệp văn Nó giống với SingleFileHTTPServer, ngoại trừ việc ý đến yêu cầu GET Máy chủ nhẹ; sau xem mã, thảo luận tính khác mà bạn muốn thêm Bởi máy chủ phải đọc phục vụ tệp lớn từ hệ thống tệp qua kết nối mạng có khả làm chậm, bạn thay đổi cách tiếp cận Thay xử lý u cầu đến chủ đề thực chính, bạn đặt kết nối đến nhóm Các phiên riêng biệt lớp Bộ xử lý Yêu cầu loại bỏ kết nối khỏi nhóm xử lý chúng Ví dụ 9-12 hiển thị lớp JHTTP Như hai ví dụ trước, phương pháp () JHTTP xử lý khởi tạo, chương trình khác sử dụng lớp để chạy máy chủ web Phương pháp chính() lớp JHTTP đặt thư mục gốc tài liệu từ args[0] Cổng đọc từ args [1] 80 sử dụng cho mặc định Sau đó, đối tượng JHTTP xây dựng bắt đầu JHTTP tạo nhóm luồng để xử lý yêu cầu liên tục chấp nhận kết nối đến Bạn gửi luồng Bộ xử lý Yêu cầu cho kết nối đến vào nhóm Mỗi kết nối xử lý phương pháp chạy () lớp RequestProcessor hiển thị Ví dụ 9-13 Nó nhận luồng đầu vào đầu từ socket chuỗi chúng cho người đọc nhà văn Người đọc đọc dòng yêu cầu khách hàng để xác định phiên HTTP mà khách hàng hỗ trợ—bạn muốn gửi tiêu đề MIME HTTP/1.0 trở lên— tệp yêu cầu Giả sử phương pháp GET, tệp yêu cầu chuyển đổi thành tên tệp hệ thống tệp cục Nếu tệp yêu cầu thư mục (tức tên kết thúc dấu gạch chéo), bạn thêm tên tệp mục Bạn sử dụng đường dẫn kinh điển để đảm bảo tệp u cầu khơng đến từ bên ngồi thư mục gốc tài liệu Nếu không, khách hàng lút tất hệ thống tập tin cục cách bao gồm URL để lên hệ thống phân cấp thư mục Đây tất bạn cần từ khách hàng, máy chủ web tiên tiến hơn, đặc biệt máy chủ đăng nhập, đọc phần lại tiêu đề MIME mà khách hàng gửi Tiếp theo, tệp yêu cầu mở nội dung đọc thành mảng byte Nếu phiên HTTP 1.0 trở lên, bạn viết tiêu đề MIME thích hợp luồng đầu Để tìm loại nội dung, bạn gọi urlConnection.getFileNameMap().get ContentTypeFor(fileName) phương pháp để lập đồ phần mở rộng tệp html vào loại MIME văn /html Mảng byte chứa nội dung tệp ghi vào luồng đầu kết nối đóng Nếu tệp khơng thể tìm thấy mở, bạn gửi cho khách hàng phản hồi 404 Nếu khách hàng gửi phương pháp mà bạn không hỗ trợ, chẳng hạn POST, bạn gửi lại lỗi 501 Nếu có ngoại lệ xảy ra, bạn đăng nhập, đóng kết nối tiếp tục Máy chủ có chức khắc khổ Dưới vài tính thêm vào: • Giao diện quản trị máy chủ • Hỗ trợ api Java Servlet • Hỗ trợ cho phương thức yêu cầu khác, chẳng hạn POST, HEAD PUT • Hỗ trợ nhiều gốc tài liệu để người dùng cá nhân có trang web riêng họ Cuối cùng, dành chút thời gian suy nghĩ cách tối ưu hóa máy chủ Nếu bạn thực muốn sử dụng JHTTP để chạy trang web có lưu lượng truy cập cao, có vài điều tăng tốc máy chủ Điều cần làm thực nhớ đệm thông minh Theo dõi yêu cầu bạn nhận lưu trữ liệu từ tệp yêu cầu thường xuyên Bản đồ để chúng lưu giữ nhớ Sử dụng luồng ưu tiên thấp để cập nhật nhớ cache Bạn thử sử dụng I/O kênh không chặn thay luồng luồng Chúng ta khám phá khả chương 11 ... byte viết từ đọc byte Socket bảo vệ lập trình viên khỏi chi tiết cấp thấp mạng, chẳng hạn phát lỗi, kích thước gói, tách gói, truyền lại gói, địa mạng 1.1 Sử dụng socket Socket kết nối hai máy... Socket( "www.yahoo.com", 80); SocketAddress yahoo = socket. getRemoteSocketAddress(); socket. close(); Sau đó, bạn kết nối lại với Yahoo! địa này: Socket socket2 = new Socket( ); socket2 .connect(yahoo); Lớp InetSocketAddress... getRemoteSocketAddress() Public SocketAddress getLocalSocketAddress() Cả hai phương pháp trả null socket chưa kết nối Ví dụ: trước tiên bạn kết nối với Yahoo! sau lưu trữ địa nó: Socket socket = new Socket( "www.yahoo.com",

Ngày đăng: 06/12/2022, 10:06

Xem thêm:

HÌNH ẢNH LIÊN QUAN

Đầu ra điển hình giống như nếu bạn kết nối với Telnet: $ - BÁO cáo CHI TIẾT lập TRÌNH MẠNG đề tài  SOCKET FOR CLIENTS
u ra điển hình giống như nếu bạn kết nối với Telnet: $ (Trang 13)
Hình 8-1 cho thấy một giao diện có thể cho một máy khách whois đồ họa phụ thuộc vào  Ví dụ 8-7 cho các kết nối mạng thực tế - BÁO cáo CHI TIẾT lập TRÌNH MẠNG đề tài  SOCKET FOR CLIENTS
Hình 8 1 cho thấy một giao diện có thể cho một máy khách whois đồ họa phụ thuộc vào Ví dụ 8-7 cho các kết nối mạng thực tế (Trang 48)
w