Hi,
I am trying to create a chat program.(Programs are attached)
Please find the code below, where I am having the problem.
def run( self ):
while 1:
print "Hello There !!!!"
print self.descriptors
# Await an event on a readable socket descriptor
(sread, swrite, sexc) = select.select( self.descriptors,
[], [] )
print sexc
# Iterate through the tagged read descriptors
print sread
print "Hello There 1 !!!!"
for sock in sread:
For this I am getting the output as below:
bash-3.1$ python Server.py
Enter the Port:...9009
ChatServer started on port 9009
Hello There !!!!
[<socket._socketobject object at 0x0000000002487660>]
But it is not printing the value of sread or "Hello There 1 !!!!!"
import socket
import select
class ChatServer:
def __init__( self, port ):
self.port = port;
self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
self.srvsock.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )
self.srvsock.bind( ("", port) )
self.srvsock.listen( 5 )
self.descriptors = [self.srvsock]
print 'ChatServer started on port %s' % port
def run( self ):
while 1:
print "Hello There !!!!"
print self.descriptors
# Await an event on a readable socket descriptor
(sread, swrite, sexc) = select.select( self.descriptors, [], [] )
print sexc
# Iterate through the tagged read descriptors
print sread
print "Hello There 1 !!!!"
for sock in sread:
# Received a connect to the server (listening) socket
if sock == self.srvsock:
self.accept_new_connection()
else:
# Received something on a client socket
str = sock.recv(100)
# Check to see if the peer socket closed
if str == '':
host,port = sock.getpeername()
str = 'Client left %s:%s\r\n' % (host, port)
self.broadcast_string( str, sock )
sock.close()
self.descriptors.remove(sock)
else:
host,port = sock.getpeername()
newstr = '[%s:%s] %s' % (host, port, str)
self.broadcast_string( newstr, self.srvsock )
def accept_new_connection( self ):
newsock, (remhost, remport) = self.srvsock.accept()
self.descriptors.append( newsock )
newsock.send("You're connected to the Python chatserver\r\n")
str = 'Client joined %s:%s\r\n' % (remhost, remport)
self.broadcast_string( str, newsock )
def broadcast_string( self, str, omit_sock ):
for sock in self.descriptors:
if sock != self.srvsock and sock != omit_sock:
sock.send(str)
print str,
if __name__ == '__main__':
portno = int(raw_input("Enter the Port:..."))
s = ChatServer(portno)
s.run()
from Tkinter import *
import tkMessageBox
import socket
import logging
import sys, time
import pickle
import thread
class ClientChat():
def __init__(self,serverport):
self.counter = 0
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.host = 'localhost' # server address
self.port = serverport # server port
# connect to server
self.s.connect((self.host, self.port))
self.chatclient = Tk()
self.chatclient["padx"] = 200
self.chatclient["pady"] = 200
self.chatclient.title("Client")
self.f1 = Frame(self.chatclient,width = 100, height = 10)
self.f1.pack(side = TOP)
self.f2 = Frame(self.chatclient,width = 100, height = 10)
self.f2.pack(side = BOTTOM)
self.recvmsg = Text(self.f1, width = 100, height = 10)
self.sb = Scrollbar(self.f1)
self.sb.pack(side = RIGHT, fill = Y)
self.sb.config(command = self.recvmsg.yview)
self.recvmsg.config(yscrollcommand=self.sb.set)
self.recvmsg.pack(padx = 10, pady =10)
self.sendmsg = Text(self.f2, width = 100, height = 5)
self.sendmsg.pack(padx = 10, pady =20)
self.sendbutton =Button(self.f2, width = 5, height = 2, text = "Send",
command = self.senddata)
self.sendbutton.pack(side = LEFT, padx = 10, pady = 10)
self.sendbutton =Button(self.f2, width = 5, height = 2, text = "Exit",
command = self.exitchat)
self.sendbutton.pack(side = RIGHT, padx = 10, pady = 10)
self.chatclient.mainloop()
def senddata(self):
self.k = self.sendmsg.get(1.0, END)
self.sendmsg.delete(1.0, END)
self.s.send(self.k)
if self.counter == 0:
thread.start_new_thread(self.recvdata,())
## if self.k == '':
## thread.exit()
## self.s.close()
## self.chatclient.destroy()
def exitchat(self):
self.s.close()
self.chatclient.destroy()
def recvdata(self):
while 1:
self.v = self.s.recv(1024)
self.recvmsg.insert(END,self.v)
if __name__ == '__main__':
serverport = int(raw_input("Enter the server address:..."))
c = ClientChat(serverport)
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor