Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > http://stackoverflow.com/questions/15311450/my-chat-client-freezes-up-after-beginning-threads

Reply
Thread Tools

http://stackoverflow.com/questions/15311450/my-chat-client-freezes-up-after-beginning-threads

 
 
Owatch
Guest
Posts: n/a
 
      03-09-2013
I made a better chat client following help from people:

They told me that if I didn't want to be blocked on .recv when waiting for messages, I would need to use threads, classes, functions, and queues to do so.

So I followed some help a specific person gave me where I created a thread from a class and then defined a function that was supposed to read incoming messages and print them.

I also created a function that allows you to enter stuff to be sent off.

Thing is, when I run the program. Nothing happens.

Can somebody help point out what is wrong? (I've asked questions and researched for 3 days, without getting anywhere, so I did try)



from socket import *
import threading
import json
import select

print("Client Version 3")
HOST = input("Connect to: ")
PORT = int(input("On port: "))
# Create Socket

s = socket(AF_INET,SOCK_STREAM)
s.connect((HOST,PORT))
print("Connected to: ",HOST,)

#-------------------Need 2 threads for handling incoming and outgoing messages--

# 1: Create out_buffer:
Buffer = []

rlist,wlist,xlist = select.select([s],Buffer,[])

class Incoming(threading.Thread):
# made a function a thread
def Incoming_messages():
while True:
for i in rlist:
data = i.recv(1024)
if data:
print(data.decode())

# Now for outgoing data.
def Outgoing():
while True:
user_input=("Your message: ")
if user_input is True:
Buffer += [user_input.encode()]
for i in wlist:
s.sendall(Buffer)
Buffer = []


Thanks for taking a look, thanks also to Tony The Lion for suggesting this

If the code isnt done right, here's a link to view it, and download:

View: http://i1267.photobucket.com/albums/...ps4beb891b.png
Download: http://www.mediafire.com/?u51a9b5axfffoxl
 
Reply With Quote
 
 
 
 
Andrew Berg
Guest
Posts: n/a
 
      03-09-2013
On 2013.03.09 09:26, Owatch wrote:
> Thing is, when I run the program. Nothing happens.
>
> Can somebody help point out what is wrong? (I've asked questions and researched for 3 days, without getting anywhere, so I did try)

You defined a thread, but never created or started it. Also, why did you
subclass threading.Thread? You also mentioned queues, but you didn't use
them.

Not tested, but shows the basics:

import threading
import queue
import socket

def process():
while alive:
thing = things_to_process.get()
# do stuff with the thing here
things_to_process.task_done()

alive = True
host = 'localhost'
port = 9999
things_to_process = queue.Queue()
process_thread = threading.Thread(target=process)
process_thread.start()
sock = socket.socket()
sock.connect((host, port))
while alive:
try:
data = sock.recv()
except Exception: # should probably do different things for different
errors in real code
alive = False
sock.close()
process_thread.join()
raise
else:
things_to_process.put(data)

--
CPython 3.3.0 | Windows NT 6.2.9200 / FreeBSD 9.1
 
Reply With Quote
 
 
 
 
Owatch
Guest
Posts: n/a
 
      03-09-2013
On Mar 9, 6:35*pm, Andrew Berg <(E-Mail Removed)> wrote:
> On 2013.03.09 09:26, Owatch wrote:> Thing is, when I run the program. Nothing happens.
>
> > Can somebody help point out what is wrong? (I've asked questions and researched for 3 days, without getting anywhere, so I did try)

>
> You defined a thread, but never created or started it. Also, why did you
> subclass threading.Thread? You also mentioned queues, but you didn't use
> them.
>
> Not tested, but shows the basics:
>
> import threading
> import queue
> import socket
>
> def process():
> * while alive:
> * * thing = things_to_process.get()
> * * # do stuff with the thing here
> * * things_to_process.task_done()
>
> alive = True
> host = 'localhost'
> port = 9999
> things_to_process = queue.Queue()
> process_thread = threading.Thread(target=process)
> process_thread.start()
> sock = socket.socket()
> sock.connect((host, port))
> while alive:
> * try:
> * * data = sock.recv()
> * except Exception: # should probably do different things for different
> errors in real code
> * * alive = False
> * * sock.close()
> * * process_thread.join()
> * * raise
> * else:
> * * things_to_process.put(data)
>
> --
> CPython 3.3.0 | Windows NT 6.2.9200 / FreeBSD 9.1


Thanks.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments