Python Socket : Lỗi khi dùng hàm nhận data

Chào mọi người,

Mình đang viết một ứng dụng mô hình Agent-Manager bằng Python sử dụng thư viện socket.
Trong quá trình làm thì mình gặp lỗi không thể sử dụng hàm recv(buffer-size).
Tóm tắt phần code trên Agent :
Mở 1 socket UDP để lắng nghe. Nếu thông điêp truyền tới match với mã xác thực thì khởi tạo 1 TCP để truyền thông tin tới host đã gửi thông điệp.

Trên Manager :
Gửi tới địa chỉ broadcast của một subnet 1 thông điệp với mục đích tìm các máy có cài đặt Agent. Máy cài đặt Agent khi nhận được sẽ tự động tạo TCP socket gửi thông tin về Manager như mình nói ở trên.

Phần code của Agent hoạt động ok nhưng trên Manager mình dùng hàm s.recv(1024) để nhận data gửi tới từ client thì chương trình sẽ báo lỗi như sau :

Error listen: [Errno 10057] A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using a sendto call) no address was supplied
[Finished in 0.8s with exit code 1]
[shell_cmd: python -u "C:\Users\Win7_Lab\Desktop\Server.py"]
[dir: C:\Users\Win7_Lab\Desktop]
[path: C:\Python27\;C:\Python27\Scripts;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\]

Đây là code phần Agent :

def ListenServer():
    # Listen init signal from Server to send data

    HOST = ''                 # Symbolic name meaning all available interfaces
    PORT = 50007              # Arbitrary non-privileged port

    # UDP Socket
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((HOST, PORT))
    data, addr = s.recvfrom(1024)
    if data == 'Authen':
        SocketConnect(addr[0])

def SocketConnect(HOST):
    # Connect to Server to send data
    print HOST
    PORT = 50008              # The same port as used by the server

    # Create Socket
    print "Create Socket"
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error, e:
        print "Error creating socket: %s" %e
        sys.exit(1)

    # Connect
    print "Connect"
    try:
        s.connect((HOST, PORT))
    except socket.error, e:
        print "Connection error: %s" %e
        sys.exit(1)

    # Send Data
    print "Send Data"
    try:
        s.sendall('Hello, world')
    except socket.error, e:
        print "Error sending data: %s" % e
        sys.exit(1)


    # Close Socket
    s.close()
    print "Close Socket"

ListenServer() 

Đây là code phần Manager :

from netaddr import IPAddress
import socket
import sys
import ipaddress
import time


def FindAgent():
    PORT = 50007          # Port use to find Agent

    #Find broadcast address

    """IPAddress("255.255.255.0").netmask_bits()        #Convert Subnet Mask to Prefix Length, Result is 24"""
    try :
        HOST = str(ipaddress.ip_network(u'192.168.10.0/24')[-1])
    except ValueError as e :
        """e = sys.exc_info()[0]  # Find Exception you need"""
        print e

    # UDP client
    MESSAGE = "Authen"
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    for x in range(0,2):
        sock.sendto(MESSAGE, (HOST, PORT))


def ListenClient():
    # Listen Client sent data
    HOST = socket.gethostbyname(socket.gethostname())
    PORT = 50008
    # TCP socket

    # Create Socket
    print "Create Socket"
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error, e:
        print "Error creating socket: %s" %e
        sys.exit(1)

    # Bind
    print "Bind"
    try:
        s.bind((HOST, PORT))
    except socket.error, e:
        print "Error bind: %s" %e
        sys.exit(1)

    # Listen
    print "Listen"
    try:
        s.listen(10)
    except socket.error, e:
        print "Error listen: %s" %e
        sys.exit(1)

    # Accept data from client
    print "Accept data from client"
    try:
        conn, addr = s.accept()
        data = s.recv(1024)
    except socket.error, e:
        print "Error listen: %s" %e
        sys.exit(1)

    print data
    s.close()

FindAgent()
ListenClient() 

Bạn nào có kinh nghiệm về lập trình socket với python giúp mình với nhé.

bạn thử in ra HOST xem có đúng với IP mong muốn không? thường thì mình sẽ get host bằng cách khác.

Cảm ơn bạn nhưng đó không phải lý do. mình tìm được đáp án rồi. Bạn tham khảo link này nhé :

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?