socket send help

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Wed Dec 24 02:03:19 EST 2008


En Wed, 24 Dec 2008 03:59:42 -0200, greywine at gmail.com  
<greywine at gmail.com> escribió:

> New guy here.  I'm trying to figure out sockets in order to one day do
> a multiplayer game.  Here's my problem:  even the simplest examples
> don't work on my computer:
>
> A simple server:
>
> from socket import *
> myHost = ''

Try with myHost = '127.0.0.1' instead - a firewall might be blocking your  
server.

> s.listen(5)                         # allow 5 simultaneous connections

Not exactly: your server program only handles a single connection at a  
time. The 5 above specifies how many connections may exist "on hold"  
waiting for you to accept() them.

>             connection.send('echo -> ' + data)

That's fine for Python 2.6, but you must use b'echo -> ' with 3.0

> And a simple client:
>
> s.send('Hello world')               # send the data

Same as above, should be b'Hello world' with Python 3.0

> If I run testserver.py via the cmd prompt in Windows XP and then the
> testclient.py program, I get the following error:
>
> Traceback (most recent call last):
>   File "C:\Python30\testclient.py", line 12, in <module>
>     s.send('Hello world')               # send the data
> TypeError: send() argument 1 must be string or buffer, not str

The above error message is wrong (and I think it was corrected on the 3.0  
final release; if you got it with 3.0 final, file a bug report at  
http://bugs.python.org/ )

> This happens in 2.6 or 3.0 and with different example client & server
> programs from the web.  What am I missing?

The error above surely comes from 3.0; with 2.6 you should get a different  
error (if it fails at all). Try again with 2.6.1. I didn't run the code  
but it looks fine -- if you got it from a book or article, unless it  
explicitely says "Python 3.0", assume it was written for the 2.x series.

-- 
Gabriel Genellina




More information about the Python-list mailing list