On 14/04/12 17:41, Khalid Al-Ghamdi wrote:

1- In line (15), what are these variables tcpCliSock,addr supposed to
hold and do?

The socket object and the IP address of the client that is connecting to the server. When a client connects to a server the server assigns a new temporary socket connection that the client uses. Each connection gets a new temporary socket assignment. What happens to the old one is implementation dependent and you should not try to reuse it.

2- Why do I have to specify the buffer size and what does it mean?

A buffer is an area of memory used as a kind of holding bay into which data is put, usually temporarily. You need to specify where the incoming data will go and how much space you expect to use.

3- When I try to run the below code and its corresponding client it
works ok for the first time, but then it gives me this error:

Traceback (most recent call last):
   File "C:\Python32\Khalid Stuff\tsTserv3.py", line 12, in <module>
     tcpSerSock.bind(ADDR)
socket.error: [Errno 10048] Only one usage of each socket address
(protocol/network address/port) is normally permitted

I thought it had to do with  the address so I changed the port and it
worked ok. so,:

A/ isn't the optional tcpSerSock.close() supposed to close the
connection for later reuse?

Yes, but there is sometimes a delay before the OS cleans up, it may be that which you are seeing.

B/ why is it when i go to the IDLE and enter tcpSerSock.close() and it
accepts it, it still gives the same error and doesn't close the
connection for reuse by my code?

It may be an OS level thing. But I'm by no means an expert on the OS networking layers! Which OS are you running under?

      HOST = ''
      PORT = 21567
      BUFSIZ = 1024
      ADDR =(HOST, PORT)
      tcpSerSock = socket(AF_INET, SOCK_STREAM)
      tcpSerSock.bind(ADDR)
      tcpSerSock.listen(5)

      while True:
           print('waiting for connection ...')
           tcpCliSock, addr = tcpSerSock.accept()
           print('...connected from: ', addr)
           while True:
               data = tcpCliSock.recv(BUFSIZ)
               if not data:
                    break
           tcpCliSock.send(bytes('[{}]
                           {}'.format(ctime(),data.decode('utf-8')),'utf-8'))
           tcpCliSock.close()
      tcpSerSock.close()

I can't help but think you should check if there actually is a connection before starting the second loop... What do you expect
if the accept() fails to find anything?

--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to