Hướng dẫn how to keep a socket connection open python - cách giữ kết nối ổ cắm mở python

Đối với một vấn đề tương tự ở đây Lỗi: [errno 10053]

Tôi cũng đã thử điều tương tự và có lỗi tương tự.

Nếu có một mã đơn giản như thế này để chứng minh lỗi này:

import socket 

host = 'localhost' 
port = 5001 
size = 102400
s = socket.socket[socket.AF_INET, socket.SOCK_STREAM] 
s.connect[[host,port]]
for msg in ['Hello, world','Test','anything goes here']:
    s.send[msg]
    data = s.recv[size]
    print 'Received:', data 
s.close[]  

Nếu bạn tạo một đối tượng ổ cắm và AMT, nó có thể gửi và lặp lại từ máy chủ để xem máy thu của nó, nếu bạn thay đổi điều đó, hãy nói 1024 đến 102400 [trong mã này]; Điều đó có nghĩa là ổ cắm không được đóng nhưng một lần nữa trong hệ điều hành Windows của tôi, phía máy chủ tiếp tục nghe và in bất kỳ dữ liệu nào mà máy khách gửi nhưng ở phía máy khách, bạn gặp lỗi này;

Tuy nhiên, nếu khách hàng chỉ có thể kết nối một lần và chỉ gửi và chỉ nhận một lần, thì đó là cách nó được thiết kế. Thử này hoạt động mà không có bất kỳ lỗi nào:

for msg in ['Hello, world','Test','anything goes here']:
    s = socket.socket[socket.AF_INET, socket.SOCK_STREAM] 
    s.connect[[host,port]]
    s.send[msg]
    data = s.recv[size]
    s.close[]
    print 'Received:', data

Tôi không chắc chắn nếu một đối tượng ổ cắm chỉ hoạt động một lần để gửi và nhận dữ liệu.

Cập nhật Tôi nghĩ rằng vấn đề là công suất trên mỗi ổ cắm của khách hàng để nhận dữ liệu theo bộ đệm cố định; Đó là lý do tại sao đoạn mã thứ hai ở trên hoạt động do đó tạo ra các ổ cắm kết nối máy khách mới trên máy chủ. Nhưng theo cách đó, rất nhiều ổ cắm sẽ được sử dụng hết. I think the issue was the capacity per client socket to receive data as per the buffersize fixed; That's why the second code snippet above works thus creating new client connection sockets on the server. But that way lots of sockets are going to get used up.

Thay vào đó, mã sau đã khắc phục vấn đề đó bằng cách kiểm tra AMT của kích thước được sử dụng hết. Nếu nó vượt quá số tiền đã cho, nó sẽ tạo một ổ cắm mới tại máy khách 'nhưng đảm bảo tin nhắn được gửi; Trên thực tế, vấn đề là với mã máy chủ nhưng đã sửa nó.

Kích thước = 10

Đây là một nỗ lực nhanh chóng của em bé trong mã. Tôi chắc chắn bạn sẽ hiểu và tối ưu hóa nó tốt hơn!

Mã khách hàng:

messag = ['Hello, world', 'Test', 'anything goes here']

def client_to_server[messag,host,port,size]:
    s = socket.socket[socket.AF_INET, socket.SOCK_STREAM]
    s.connect[[host, port]]
    countmsg = 0
    restmsg = ''
    for msg in messag:
        strl = tmsg = msg
        if len[restmsg]:
            tmsg = restmsg + ' ' + msg
        countmsg = len[tmsg]
        if countmsg 

Bài Viết Liên Quan

Chủ Đề