Hi there,
I'm currently in the process of creating a Multi-User Dungeon (MUD) in python.
It'll allow multiple users to explore a text based world.

I've got a basic server but i can't seem to get a client to work with it.

MUD server.py

import socket

#Connect with telnet
#On linux: telnet localhost 5001
#or: telnet 192.168.1.8 5001 (if you connecting to a different machine)


#Port we wish to serve on
SERVER_PORT=5001

#create STREAMing socket (TCP)
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#Bind to any/default interface on the local machine
serversocket.bind(("", SERVER_PORT))

#become a server socket
serversocket.listen(5)


#List of clients - fill this up as we go
clients=[]

#Each client has a name and a socket.
#You can/should add to this - location, inventory, ...


#Set blocking to OFF.  Without threads, this is the only way we can
#deal with multiple users.  If blocking is ON, we will be stuck at the
#accept() funciton call until someone connects
serversocket.setblocking(0)

while True:
    try:
        #accept connections from outside. Note we get a new socket
        #object, leaving the original one free for more users to
        #connect
        (clientsocket, address) = serversocket.accept()
        #add it to the client list
        person={}
        person["name"]="guest" #Everyone starts as guest
        person["sock"]=clientsocket
        
        clients.append(person)
        #Set blocking to OFF.  Same as before, but this time we don't
        #want to block on the recv() call
        clientsocket.setblocking(0)
    except:
        #Non-blocking sockets throw an exception if asked to
        #connect/recieve when there's nothing to do.  They do this
        #rather than block.  We need to cope with that, so we catch
        #the exception and move on
        pass


    #Keep a list of messages ready to be sent
    messages=[]


    #See which clients have something to say
    for c in clients:
        try:
            #Catch the exception associated with non-blocking sockets again
            data=c["sock"].recv(1024)
            if data!="" and data != None:
                #Use this if you need to debug exacty what the server receives from clients
                #for ch in data:
                #    print ord(ch),",",
                #print
                data=data[:-2]
                if data.startswith("say:"):
                    messages.append("%s says '%s'\n"%(c["name"], data[data.find(":")+1:]))
                elif data=="look":
                    c["sock"].send("I can't see anything.  Nobody has implemented locations.  Yet...\n")
                else:
                    #If there is something else, send a message back
                    c["sock"].send("Sorry, didn't understand that.\n")
            
                
        except:
            pass
        
    #Now we have a list of messages sent from clients since the last
    #time through the loop, we send each item to every client
    for c in clients:
        for m in messages:
            c["sock"].send(m)

an example of a client i'm trying to ge to work is:
Client.py

#!/usr/bin/python
#Send text to the log server

import socket

HOST = '127.0.0.1'
SERVER_PORT = 5001              

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

while 1:
    #Get any data
    data = raw_input("Data: ")

    serversocket.sendto(data,(HOST,SERVER_PORT))
    if data=="quit": break

As i said i cannot get it to work, if i could the res, i think, would be a cakewalk (putting in rooms and equipment etc.)

Can anyone give me any advice to help get this working together?
I am abit stuck.

My apologese if i havent been very in depth.

Thanks in advance
Thehivtyrant

This article has been dead for over six months. Start a new discussion instead.