Làm cách nào để nhập ổ cắm trong python?

Không thể phủ nhận Internet đã trở thành 'Linh hồn của sự tồn tại' và hoạt động của nó được đặc trưng bởi 'Kết nối' hoặc 'Mạng'. Các mạng này được thực hiện bằng cách sử dụng một trong những nguyên tắc cơ bản quan trọng nhất của Ổ cắm. Bài viết này đề cập đến tất cả các lĩnh vực liên quan đến Lập trình Socket trong Python. Ổ cắm giúp bạn thực hiện các kết nối này, trong khi Python chắc chắn giúp bạn dễ dàng

Hãy xem nhanh tất cả các chủ đề được đề cập trong bài viết này








Tại sao nên sử dụng Ổ cắm?

Ổ cắm là xương sống của mạng. Chúng giúp truyền thông tin giữa hai chương trình hoặc thiết bị khác nhau. Ví dụ: khi bạn mở trình duyệt của mình, bạn với tư cách là khách hàng đang tạo kết nối đến máy chủ để truyền thông tin

Trước khi tìm hiểu sâu hơn về giao tiếp này, trước tiên hãy tìm hiểu chính xác những ổ cắm này là gì

Ổ cắm là gì?

Nói chung, ổ cắm là điểm cuối bên trong được xây dựng để gửi và nhận dữ liệu. Một mạng duy nhất sẽ có hai ổ cắm, một ổ cắm cho mỗi thiết bị hoặc chương trình giao tiếp. Các ổ cắm này là sự kết hợp của địa chỉ IP và Cổng. Một thiết bị có thể có số 'n' ổ cắm dựa trên số cổng đang được sử dụng. Các cổng khác nhau có sẵn cho các loại giao thức khác nhau. Hãy xem hình ảnh sau đây để biết thêm về một số số cổng phổ biến và các giao thức liên quan


Làm cách nào để nhập ổ cắm trong python?

Bây giờ bạn đã rõ về khái niệm socket, bây giờ chúng ta hãy xem mô-đun Socket của Python

Cách đạt được Lập trình ổ cắm trong Python

Để đạt được Lập trình ổ cắm bằng Python, bạn sẽ cần nhập mô-đun ổ cắm hoặc khung. Mô-đun này bao gồm các phương thức tích hợp cần thiết để tạo ổ cắm và giúp chúng liên kết với nhau

Một số phương pháp quan trọng như sau

Phương thứcMô tả

ổ cắm. ổ cắm()

được sử dụng để tạo ổ cắm (bắt buộc trên cả máy chủ cũng như máy khách để tạo ổ cắm)

ổ cắm. Chấp nhận()

được sử dụng để chấp nhận một kết nối. Nó trả về một cặp giá trị (conn, address) trong đó conn là một đối tượng ổ cắm mới để gửi hoặc nhận dữ liệu và địa chỉ là địa chỉ của ổ cắm có ở đầu kia của kết nối

ổ cắm. trói buộc()

được sử dụng để liên kết với địa chỉ được chỉ định làm tham số

ổ cắm. Thoát()

được sử dụng để đánh dấu ổ cắm là đã đóng

ổ cắm. liên kết()

được sử dụng để kết nối với một địa chỉ từ xa được chỉ định làm tham số

ổ cắm. nghe()

cho phép máy chủ chấp nhận kết nối

Bây giờ bạn đã hiểu tầm quan trọng của mô-đun socket, hãy tiếp tục xem nó có thể phục vụ như thế nào để tạo máy chủ và máy khách cho Lập trình socket trong Python

Máy chủ là gì?

Máy chủ là một chương trình, máy tính hoặc thiết bị được dùng để quản lý tài nguyên mạng. Máy chủ có thể nằm trên cùng một thiết bị hoặc máy tính hoặc được kết nối cục bộ với các thiết bị và máy tính khác hoặc thậm chí từ xa. Có nhiều loại máy chủ như máy chủ cơ sở dữ liệu, máy chủ mạng, máy chủ in, v.v.

Máy chủ thường sử dụng các phương thức như ổ cắm. ổ cắm(), ổ cắm. liên kết(), ổ cắm. listen(), v.v. để thiết lập kết nối và liên kết với máy khách. Bây giờ hãy viết chương trình để tạo một máy chủ. Xem xét ví dụ sau

THÍ DỤ

import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(),1234))          
#port number can be anything between 0-65535(we usually specify non-previleged ports which are > 1023)
s.listen(5)

while True:
    clt,adr=s.accept()
    print(f"Connection to {adr}established")  
   #f string is literal string prefixed with f which 
   #contains python expressions inside braces
    clt.send(bytes("Socket Programming in Python","utf-8 ")) #to send info to clientsocket

Như bạn có thể thấy, điều cần thiết đầu tiên để tạo một ổ cắm là nhập mô-đun ổ cắm. Sau đó, ổ cắm. Phương thức socket() được sử dụng để tạo socket phía máy chủ

GHI CHÚ

AF_INET đề cập đến Địa chỉ từ Internet và nó yêu cầu một cặp (máy chủ, cổng) trong đó máy chủ có thể là URL của một số trang web cụ thể hoặc địa chỉ của nó và số cổng là một số nguyên. SOCK_STREAM được sử dụng để tạo Giao thức TCP

Phương thức bind() chấp nhận hai tham số dưới dạng một bộ (máy chủ, cổng). Tuy nhiên, tốt hơn hết bạn nên sử dụng số cổng có 4 chữ số vì số cổng thấp hơn thường được sử dụng. Phương thức listen() cho phép máy chủ chấp nhận các kết nối. Ở đây, 5 là hàng đợi cho nhiều kết nối xuất hiện đồng thời. Giá trị tối thiểu có thể được chỉ định ở đây là 0 (Nếu bạn cung cấp giá trị nhỏ hơn, giá trị đó sẽ thay đổi thành 0). Trong trường hợp không có tham số nào được chỉ định, nó sẽ lấy một tham số phù hợp mặc định

Cho phép chấp nhận kết nối mãi mãi. 'clt' và 'adr' là đối tượng và địa chỉ máy khách. Câu lệnh in chỉ in ra địa chỉ và số cổng của ổ cắm máy khách. Cuối cùng, clt. gửi được sử dụng để gửi dữ liệu theo byte

Bây giờ máy chủ của chúng tôi đã được thiết lập xong, hãy chuyển sang máy khách

Khách hàng là gì?

Máy khách là máy tính hoặc phần mềm nhận thông tin hoặc dịch vụ từ máy chủ. Trong mô-đun máy khách-máy chủ, máy khách yêu cầu dịch vụ từ máy chủ. Ví dụ tốt nhất là trình duyệt web như Google Chrome, Firefox, v.v. Các trình duyệt web này yêu cầu máy chủ web cung cấp các trang web và dịch vụ cần thiết theo chỉ dẫn của người dùng. Các ví dụ khác bao gồm trò chơi trực tuyến, trò chuyện trực tuyến, v.v.

Bây giờ chúng ta hãy xem cách viết mã chương trình phía máy khách bằng ngôn ngữ lập trình Python

THÍ DỤ

import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 2346))
msg=s.recv(1024)
print(msg.decode("utf-8"))

Bước đầu tiên là nhập mô-đun ổ cắm và sau đó tạo một ổ cắm giống như bạn đã làm khi tạo máy chủ. Sau đó, để tạo kết nối giữa máy khách-máy chủ, bạn sẽ cần sử dụng phương thức connect() bằng cách chỉ định (máy chủ, cổng)


GHI CHÚ. gethostname được sử dụng khi máy khách và máy chủ trên cùng một máy tính. (LAN – ip cục bộ / WAN – ip công cộng)

Ở đây, máy khách muốn nhận một số thông tin từ máy chủ và để làm điều này, bạn cần sử dụng phương thức recv() và thông tin được lưu trữ trong một biến khác msg. Chỉ cần lưu ý rằng thông tin được truyền sẽ ở dạng byte và trong ứng dụng khách trong chương trình trên có thể nhận tới 1024 byte (kích thước bộ đệm) trong một lần truyền. Nó có thể được chỉ định cho bất kỳ số tiền nào tùy thuộc vào lượng thông tin được truyền

Cuối cùng, tin nhắn được chuyển sẽ được giải mã và in

Bây giờ bạn đã biết cách tạo các chương trình máy khách-máy chủ, hãy tiếp tục xem chúng cần được thực thi như thế nào

Máy khách-máy chủ Echo

Để thực thi các chương trình này, hãy mở dấu nhắc lệnh của bạn, vào thư mục nơi bạn đã tạo chương trình máy khách và máy chủ của mình, sau đó nhập

máy chủ py. py    (ở đây, máy chủ. py là tên tệp của máy chủ, bạn cũng có thể sử dụng py -3. 7 máy chủ. py)

Khi điều này được thực hiện, máy chủ bắt đầu chạy. Để thực thi ứng dụng khách, hãy mở một cửa sổ cmd khác và nhập

khách hàng py. py    (ở đây, khách hàng. py là tên tệp của ứng dụng khách)

ĐẦU RA ( MÁY CHỦ ).  

cmd server-Socket Programming in Python-Edureka

(KHÁCH HÀNG)

cmd client-SocketProgramminginPython-Edureka

Hãy thử chương trình tương tự bằng cách giảm kích thước bộ đệm xuống 7 và xem kết quả chúng tôi nhận được

ĐẦU RA.  

client2-Socket Programming in Python-Edureka

Như bạn có thể thấy, kết nối bị ngắt sau khi truyền 7 byte. Nhưng đây là một vấn đề vì bạn chưa nhận được thông tin đầy đủ và kết nối đã bị đóng. Hãy tiếp tục giải quyết vấn đề này

nhiều thông tin liên lạc

Để kết nối tiếp tục cho đến khi máy khách nhận được thông tin đầy đủ, bạn có thể sử dụng vòng lặp while

THÍ DỤ

import socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 2346))
while True:
msg=s.recv(7)
print(msg.decode("utf-8"))

Sau khi bạn thực hiện việc này, toàn bộ thông báo sẽ được nhận trong 7 byte cho mỗi lần truyền

Nhưng lần này, như bạn có thể thấy, kết nối không bị ngắt và bạn không bao giờ biết khi nào nó sẽ xảy ra. Và để thêm vào điều này, điều gì sẽ xảy ra nếu bạn thực sự không biết mức độ lớn của thông báo hoặc thông tin mà khách hàng sẽ nhận được từ máy chủ. Trong những trường hợp như vậy, bạn thực sự có thể sử dụng đoạn mã sau ở phía máy khách

THÍ DỤ

complete_info=''
while True:
    msg = s.recv(7)  
    if len(msg)<=0:
        break
    complete_info += msg.decode("utf-8")
print(complete_info)

Về phía máy chủ, sử dụng phương thức close() như sau

clt.close()

Đầu ra của cái này sẽ như trong hình bên dưới

ĐẦU RA

client2-Socket Programming in Python-Edureka

Tất cả những gì khối mã trên thực hiện là kiểm tra kích thước của thông tin và in nó trong bộ đệm hai byte cùng một lúc cộng với việc đóng kết nối sau khi hoàn tất

Chuyển đối tượng Python

Cho đến đây, bạn vừa có kỹ năng chuyển chuỗi. Tuy nhiên, Lập trình socket trong Python cũng cho phép bạn chuyển các đối tượng Python. Các đối tượng này có thể là bất kỳ thứ gì như bộ, bộ, từ điển, v.v. Để đạt được điều này, bạn sẽ cần nhập mô-đun dưa chua của Python

Mô-đun dưa chua Python

Mô-đun pickle Python xuất hiện khi bạn thực sự sắp xếp hoặc hủy tuần tự hóa các đối tượng trong python. Hãy cùng xem một ví dụ nhỏ,

THÍ DỤ

import pickle

mylist=[1,2,'abc']
mymsg = pickle.dumps(mylist) 
print(mymsg)

ĐẦU RA. b’x80x03]qx00(Kx01Kx02Xx03x00x00x00abcqx01e. ’

Như bạn có thể thấy, trong chương trình trên, 'mylist' được sắp xếp theo thứ tự bằng cách sử dụng hàm dumps() của mô-đun dưa chua. Ngoài ra, hãy lưu ý rằng đầu ra bắt đầu bằng 'b', nghĩa là nó được chuyển đổi thành byte. Trong lập trình socket, bạn có thể triển khai mô-đun này để chuyển giữa máy khách và máy chủ

Làm cách nào để sử dụng mô-đun dưa chua để chuyển cấu trúc đối tượng python?

Khi bạn sử dụng pickle cùng với ổ cắm, bạn hoàn toàn có thể chuyển bất cứ thứ gì qua mạng. Hãy viết ra các đối tác phía máy chủ và phía máy khách để chuyển một danh sách từ máy chủ sang máy khách

Phía máy chủ

import socket
import pickle

a=10
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 2133))        #binding tuple
s.listen(5)
while True:
    clt , adr = s.accept()
    print(f"Connection to {adr}established")

    m={1:"Client", 2:"Server"}
    mymsg = pickle.dumps(m)  #the msg we want to print later
    mymsg = {len(mymsg):{a}}"utf-8") + mymsg
    clt.send(mymsg)

Ở đây, m là một từ điển về cơ bản cần được gửi từ máy chủ đến máy khách. Điều này được thực hiện bằng cách đầu tiên tuần tự hóa đối tượng bằng cách sử dụng kết xuất () và sau đó chuyển đổi nó thành byte
Bây giờ hãy viết ra đối tác phía máy khách

Phía khách hàng

import socket
import pickle
a=10
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 2133))

while True:
    complete_info = b''
    rec_msg = True
    while True:
        mymsg = s.recv(10)
       if rec_msg:
            print(f"The length of message = {mymsg[:a]}")
            x = int (mymsg[:a ] )
            rec_msg = False
            complete_info += mymsg
            if len(complete_info)-a == x:
            print("Recieved the complete info")
            print(complete_info[a:])
            m = pickle.loads(complete_info[a:])
            print(m)
            rec_msg = True
complete_info = b''
print(complete_info)

Vòng lặp while đầu tiên sẽ giúp chúng ta theo dõi toàn bộ thông báo (complete_info) cũng như thông báo đang được nhận (rec_msg) bằng cách sử dụng bộ đệm. tin nhắn bằng cách đặt rec_
Sau đó, trong khi nhận được tin nhắn, tất cả những gì tôi đang làm là in từng bit của nó, được nhận trong bộ đệm có kích thước 10. Kích thước này có thể là bất cứ thứ gì tùy thuộc vào sự lựa chọn cá nhân của bạn

Sau đó, nếu tin nhắn nhận được bằng với tin nhắn hoàn chỉnh, tôi chỉ in tin nhắn dưới dạng thông tin đầy đủ đã nhận, sau đó tôi đã hủy đánh số thứ tự tin nhắn bằng cách sử dụng tải()

Đầu ra của chương trình trên như sau

sending object-Socket Programming in Python-Edureka

Điều này đưa chúng ta đến phần cuối của bài viết này về Lập trình socket trong Python. Tôi hy vọng bạn hiểu tất cả các khái niệm rõ ràng

Hãy chắc chắn rằng bạn thực hành càng nhiều càng tốt và hoàn nguyên kinh nghiệm của bạn.   

Có một câu hỏi cho chúng tôi?

Để có kiến ​​thức chuyên sâu về Python cùng với các ứng dụng khác nhau của nó, bạn có thể đăng ký khóa học Python tốt nhất với sự hỗ trợ 24/7 và quyền truy cập trọn đời.  

Làm cách nào để tạo một ổ cắm trong python?

Tạo Ổ cắm .
# tạo ổ cắm INET, STREAMing s = ổ cắm. ổ cắm (ổ cắm. .
# tạo ổ cắm INET, STREAMing serverocket = socket. ổ cắm (ổ cắm. .
trong khi đúng. # chấp nhận kết nối từ bên ngoài (clientsocket, address) = serverocket

Thư viện ổ cắm python là gì?

Mô-đun 'socket' xác định cách máy chủ và máy khách có thể giao tiếp ở cấp độ phần cứng bằng cách sử dụng điểm cuối ổ cắm trên đầu hệ điều hành . API 'ổ cắm' hỗ trợ cả giao thức mạng hướng kết nối và không kết nối.

Làm cách nào để gửi dữ liệu bằng ổ cắm trong python?

Ví dụ – Máy khách dựa trên TCP. .
clientSocket = ổ cắm. ổ cắm (ổ cắm. AF_INET, ổ cắm. SOCK_STREAM); . clientSocket. kết nối(("127. 0. 0. 1",9090));
# Gửi dữ liệu đến máy chủ. dữ liệu = "Xin chào máy chủ. "; clientSocket. gửi dữ liệu. mã hóa());
dataFromServer = clientSocket. recv(1024);

Làm cách nào để tạo ổ cắm TCP trong python?

Nó bắt đầu bằng cách tạo một ổ cắm TCP/IP. .
import socket import sys # Tạo socket TCP/IP sock = socket. ổ cắm (ổ cắm. .
# Liên kết ổ cắm với cổng server_address = ('localhost', 10000) print >>sys. stderr, 'khởi động trên %s cổng %s' % server_address sock. .
# Nghe các kết nối đến sock