Reputation: 75
I'm trying to open server socket using python
the code that I'm using wait for connection and pause the loop until the next connection achieved when its trying to execute this line >>
connection, client_address = sock.accept()
but I don't need to pause the loop
Is there any method to make the code skip this line and continue the loop if there is no connection
code :
Server
import socket
import sys
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Bind the socket to the port
server_address = ('localhost', 10000)
print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)
# Listen for incoming connections
sock.listen(5)
while True:
# Wait for a connection
print >>sys.stderr, 'waiting for a connection'
connection, client_address = sock.accept()
try:
print >>sys.stderr, 'connection from', client_address
# Receive the data in small chunks and retransmit it
while True:
data = connection.recv(16)
print >>sys.stderr, 'received "%s"' % data
if data:
print >>sys.stderr, 'sending data back to the client'
connection.sendall(data)
else:
print >>sys.stderr, 'no more data from', client_address
break
finally:
# Clean up the connection
connection.close()
Client
import socket
import sys
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect the socket to the port where the server is listening
server_address = ('localhost', 10000)
print >>sys.stderr, 'connecting to %s port %s' % server_address
sock.connect(server_address)
try:
# Send data
message = 'This is the message. It will be repeated.'
print >>sys.stderr, 'sending "%s"' % message
sock.sendall(message)
# Look for the response
amount_received = 0
amount_expected = len(message)
while amount_received < amount_expected:
data = sock.recv(32)
amount_received += len(data)
print >>sys.stderr, 'received "%s"' % data
finally:
print >>sys.stderr, 'closing socket'
sock.close()
Upvotes: 1
Views: 2881
Reputation: 20685
You can set the socket to be non blocking, this will then return an error if there is no connection ready rather than blocking indefinetly
sock.setblocking(False)
try:
connection, client_address = sock.accept()
except:
print 'No Connection'
Upvotes: 0
Reputation: 44074
What you want is either:
I don't know Python very well, but I'm pretty sure it doesn't support threads for this, so async IO it is. A quick search gives me https://docs.python.org/2/library/asyncore.html
Upvotes: 1