[Tutor] Questions Regarding Sockets

Khalid Al-Ghamdi emailkgnow at gmail.com
Sun Apr 15 10:56:24 CEST 2012


Thanks a lot. You've been, as usual, very helpful.

On Sat, Apr 14, 2012 at 8:32 PM, Alan Gauld <alan.gauld at btinternet.com>wrote:

> 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 at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20120415/b3a8ec60/attachment.html>


More information about the Tutor mailing list