Mar-12-2018, 05:04 PM
I write a network application. The server has ability to find client base on given subnet. If the client receive authentication message from server, it will respond to server. Everything working good but server, it can't receiver from client.
Client :
Client :
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()Server :
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()Error on Server :
Create Socket Bind Listen Accept data from client 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\]Without the line data = s.recv(1024) on Server, it working fine. But with it, the error show up. Can anybody please tell me why it happen ?