Truyền tệp bằng lập trình ổ cắm trong python
Chúng tôi cần máy chủ. py và tệp này sẽ có mặt tại hệ thống máy chủ. Trong trường hợp của chúng tôi máy chủ. py phải ở hệ thống B_server Show
Hai tệp khách hàng khác. py và mẫu. txt phải có mặt tại hệ thống máy khách. Trong trường hợp của chúng tôi, hai tệp đó phải có mặt tại hệ thống A_client giả địnhDưới đây là các giả định
Hạn chếTrước khi tiếp tục, chúng ta nên biết rằng có một số hạn chế của chương trình này
Thiết lập yêu cầu
Mã nguồn máy chủhttps. //github. com/linuxhintcode/websamples/blob/master/python_send_file/server. py Mã nguồn khách hànghttps. //github. com/linuxhintcode/websamples/blob/master/python_send_file/client. py Cách chạy chương trình và đầu ra dự kiếnSau đây là các bước thực hiện chương trình Bước 1. Chuyển đến hệ thống B_server và mở một thiết bị đầu cuối. Phím tắt để mở terminal là Alt+Ctrl+t Bước 2. Bây giờ hãy đi đến con đường nơi máy chủ. py có mặt Bước 3. Bây giờ hãy chạy máy chủ. py như dưới đây máy chủ python3. py Không nên có bất kỳ lỗi nào và bạn sẽ thấy các bản in bên dưới Máy chủ đang lắng nghe trên cổng. 9898 Tên tệp đã sao chép sẽ là recv. txt ở phía máy chủ Bước 4. Bây giờ hãy mở terminal tại hệ thống A_client Bước5. Đi đến đường dẫn mà khách hàng. py và mẫu. txt có mặt Bước 6. Bây giờ hãy chạy ứng dụng khách. py như dưới đây máy khách python3. py < IP hệ thống B_server > Chúng tôi đã quan sát thấy rằng chúng tôi cần biết địa chỉ IP của máy chủ. Chúng ta có thể thực hiện lệnh dưới đây để biết địa chỉ IP của hệ thống B_server ifconfig Bây giờ đầu ra của hệ thống A_client sẽ như thế này ################## Đã nhận được thông báo bên dưới từ máy chủ ################## Bước7. Bây giờ, hãy truy cập B_server và tìm đầu ra bên dưới Tệp đã được sao chép thành công Bước8. Cần có một tên tệp recv. txt tại thư mục máy chủ. Nội dung của recv này. txt phải giống mẫu. txt Như vậy là chúng ta đã copy thành công một file từ client đến server qua mạng thông qua chương trình python giải thích mã Có hai máy chủ tệp python. py và khách hàng. py Lưu ý rằng chúng tôi sẽ giải thích một lần nếu có bất kỳ mã nào giống nhau bên trong máy chủ. py và khách hàng. py
#. /usr/bin/env python3 Đây là dòng shebang có nghĩa là theo mặc định máy chủ này. py nên sử dụng python3. Hãy xem một lợi thế của dòng này We have executed the server.py or client.py like python3 <.py file name>. Now without using python3 we can execute the python file. Follow below commands Chuyển đến chế độ siêu người dùng su Cho phép tất cả. tập tin py chmod 777 . py Chạy máy chủ. py ./server.py nhập ổ cắm Chúng ta đang tạo một đối tượng “s” để truy cập tất cả các phương thức của socket. Đây là một khái niệm OOP PORT = 9898 Bây giờ chúng tôi chọn một cổng nơi máy chủ sẽ lắng nghe. Chúng tôi có thể sử dụng cổng không dành riêng thay vì cổng này s. ràng buộc(('', PORT)) Chúng tôi sử dụng phương thức liên kết để liên kết địa chỉ IP của máy chủ với cổng đó [9898]. Một quan sát là chúng tôi có thể đã sử dụng địa chỉ IP chính xác của máy chủ thay cho đối số đầu tiên của phương thức liên kết nhưng chúng tôi chọn để trống vì điều này hoạt động tốt s. ràng buộc(( địa chỉ IP , PORT)) Chúng tôi đã mở một tên tệp “recv. txt” trong máy chủ cho chế độ ghi và có con trỏ tệp. Điều này là bắt buộc vì chúng tôi phải sao chép một tệp văn bản từ ứng dụng khách trong khi Đúng . Hãy bắt đầu một vòng lặp vô hạn trong khi công việc của máy chủ là đợi cho đến khi máy khách giao tiếp với máy chủ trên cổng 9898 đó. Vì vậy, vòng lặp while này là bắt buộc conn , addr = s. chấp nhận() Mã này là để chấp nhận mọi yêu cầu kết nối đến từ máy khách. Conn sẽ sử dụng “conn” để giao tiếp với client và “addr” là địa chỉ IP của client đã gửi commotion request đến server này trên cổng 9898 thông điệp = " \n\n|---------------------------------|\n Xin chào Khách hàng[Địa chỉ IP. Mã này là để tạo một tin nhắn để gửi cho khách hàng. Thông báo này sẽ được in trên thiết bị đầu cuối của khách hàng. Điều này xác nhận rằng máy khách có thể giao tiếp với máy chủ kết nối. gửi( tin nhắn. mã hóa()) Bây giờ chúng tôi đã có sẵn tin nhắn, sau đó gửi nó cho khách hàng bằng cách sử dụng “conn” đó. Mã này thực sự gửi tin nhắn cho khách hàng RecvData = kết nối. recv(1024) Mã này đang nhận bất kỳ dữ liệu nào được gửi từ phía máy khách. Trong trường hợp của chúng tôi, chúng tôi đang mong đợi nội dung của mẫu. txt trong “RecvData” while RecvData. Thêm một vòng lặp while với điều kiện RecvData không rỗng. Trong trường hợp của chúng tôi, nó không trống tệp . ghi( RecvData ) Khi chúng tôi có nội dung bên trong “RecvData”, thì chúng tôi sẽ ghi vào tệp đó “recv. txt” sử dụng con trỏ tệp “file” RecvData = kết nối. recv(1024) Một lần nữa cố gắng nhận nếu có bất kỳ dữ liệu nào từ máy khách. Khi “RecvData” không có dữ liệu, mã sẽ phá vỡ vòng lặp while tệp . đóng() Điều này sẽ chỉ đóng con trỏ tệp khi chúng ta hoàn thành việc ghi tệp kết nối. đóng() Điều này sẽ đóng kết nối với khách hàng nghỉ Điều này xuất phát từ vòng lặp vô hạn tại B_server
nhập sys Nhập thư viện sys khi chúng tôi muốn sử dụng cơ sở đối số trong python if (len(sys.argv) > 1) . : Khi chúng tôi chuyển địa chỉ IP của B_server sau tên tệp client. py trong khi chạy, chúng ta cần nắm bắt địa chỉ IP của máy chủ đó bên trong máy khách …. nếu (len(sys. argv) > 1). => Để đảm bảo người dùng chuyển ít nhất một đối số là địa chỉ IP và bắt địa chỉ IP đó ngay trong “ServerIP” Nếu người dùng không vượt qua ít nhất một mã đối số sẽ hiển thị trợ giúp và thoát khỏi mã PORT = 9898 Đây phải là cùng một cổng như đã đề cập ở phía B_server s. kết nối(( ServerIp , PORT)) Mã này sẽ thực hiện kết nối TCP với IP máy chủ bằng cổng đó. Bất cứ điều gì sai tại thời điểm này đều dẫn đến lỗi kết nối tệp = mở("sample. txt", "rb") Chúng tôi đang mở “mẫu. txt” ở chế độ đọc để chỉ đọc nội dung Gửi dữ liệu = tệp . đọc(1024) Đọc nội dung của tệp và đặt bên trong biến “SendData” while SendData. Chúng tôi đang bắt đầu một vòng lặp while nếu “SendData” có dữ liệu. Trong trường hợp của chúng tôi nếu “mẫu. txt” không trống, nó phải có dữ liệu s. gửi( Gửi dữ liệu ) Bây giờ chúng tôi có thể gửi nội dung của “mẫu. txt” đến máy chủ sử dụng đối tượng socket “s” Gửi dữ liệu = tệp . đọc(1024) Đọc lại nếu còn gì. Vì vậy, sẽ không có gì để đọc từ tệp “SendData” sẽ trống và nó sẽ xuất hiện từ vòng lặp while s. đóng() Đây không phải là đóng kết nối từ phía máy khách Ảnh chụp màn hình Ubuntu Phía máy chủẢnh chụp màn hình Ubuntu Phía máy kháchkết hợp thử nghiệm
Khuyến nghị là sử dụng hai hệ thống Linux cho máy chủ và máy khách lỗi dự kiến
Traceback (cuộc gọi gần đây nhất cuối cùng) Tệp "ứng dụng khách. py", dòng 22, in <module>
Chạy như máy khách python3. py < địa chỉ máy chủ >
Traceback (cuộc gọi gần đây nhất cuối cùng) Tệp "ứng dụng khách. py", dòng 22, in <module>
Traceback (cuộc gọi gần đây nhất cuối cùng) Tệp "ứng dụng khách. py", dòng 22, in <module>
Traceback (cuộc gọi gần đây nhất cuối cùng) Tệp "ứng dụng khách. py", dòng 25, in <module> Phần kết luậnSử dụng chương trình này, chúng tôi có thể gửi một tệp văn bản đơn giản từ hệ thống này sang hệ thống khác thông qua mạng bằng chương trình python. Điều này cung cấp cho chúng tôi kiến thức cơ bản về lập trình python và socket để gửi dữ liệu qua mạng Làm cách nào để tạo một chương trình truyền tệp đơn giản bằng python?Phương pháp tiếp cận từng bước. . Cài đặt các phụ thuộc bằng cách sử dụng cài đặt pip tại dòng lệnh Nhập các mô-đun cần thiết. http. máy chủ và socketserver. Để lưu trữ trong trình duyệt. . Chỉ định cổng và tên của người dùng Tìm địa chỉ IP của PC và chuyển đổi nó thành mã QR Tạo yêu cầu HTTP Hiển thị mã QR trong trình duyệt Làm cách nào để nhận dữ liệu từ ổ cắm trong python?Nếu bạn đang viết một chương trình socket bằng python để giao tiếp với một số máy hoặc máy chủ từ xa để nhận dữ liệu, thì bạn phải sử dụng hàm recv() to receive data on a socket. The recv() can receive only a specified number of bytes into a string buffer.
Làm cách nào để gửi tệp từ máy chủ đến máy khách trong python?CHỨC NĂNG TẠI PHÍA MÁY CHỦ
. Tạo một chức năng thu thập tất cả dữ liệu từ máy chủ và gọi một chức năng khác được sử dụng để gửi tệp ở phía máy khách. 2. Sau khi thu thập tất cả dữ liệu, ổ cắm. client_conn. hàm send() sẽ được sử dụng để gửi dữ liệu
Python có tốt cho lập trình socket không?Python cung cấp hai cấp độ truy cập vào các dịch vụ mạng. Ở mức thấp, bạn có thể truy cập hỗ trợ ổ cắm cơ bản trong hệ điều hành cơ bản , cho phép bạn triển khai máy khách và máy chủ cho cả hướng kết nối và hướng kết nối. . |