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

O

Owatch

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(,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/jj554/owatch/PPP_zps4beb891b.png
Download: http://www.mediafire.com/?u51a9b5axfffoxl
 
A

Andrew Berg

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)
 
O

Owatch

On 2013.03.09 09:26, Owatch wrote:> Thing is, when I run the program. Nothing happens.


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)

Thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,967
Messages
2,570,148
Members
46,694
Latest member
LetaCadwal

Latest Threads

Top