Zamnedix wrote:
I'm having trouble with this script I'm writing. I want it to connect
to a MUD, which it does fine, but afterwards it displays the greeting
and login prompt, and when I type in username the loop to receive and
then send seems to stop.


Here's my code:

#!/usr/bin/python
import socket
import sys
a = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
address = str(raw_input("HOST:PORT > "))
address = address.split(":")
a.connect((address[0], int(address[1])))
print "CONNECTED"
while 1:
   print a.recv(4079)
   print a.recv(4079)
   msg = str(raw_input("MSG > "))
   a.sendall(msg)

Here's what happens:
$ python connect.py
HOST:PORT > lofe.org:8000
CONNECTED


                                 ....._
((big ascii art greeting, staff info and stuff))

Enter your character's name, or type new:
MSG > Xeythos

la la la la la la

^CTraceback (most recent call last):
  File "connect.py", line 18, in ?
    print a.recv(4079)
KeyboardInterrupt
$



Also, I have to receive twice to get the whole greeting, and it comes
really slowly in two pieces.
I've looked around the internet for a good tutorial on python and
sockets but haven't really found anything. Am I using the wrong type
of socket, or what? Someone please help.

I suspect you are humg in the second a.recv since the response to the username is completely swallowed by the first one. That said, a mud client is basically a telnet client. So I recommend you use the telnetlib module. Telnet objects have a .read_until method, so your initial code wold mostly be replaced with

tn = telnetlib.Telnet(address[0], int(address[1], 30)
tn.real_until(b"or type new: ") #remove b prefix for 2.x

I recommend entering the loop until logged in. After that, you should get a consistent prompt to read up to.

Terry Jan Reedy



--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to