【发布时间】:2017-08-10 07:21:50
【问题描述】:
我正在从事以下项目:我创建了一个 TCP IP 客户端 (WPF GUI) 和一个 TCP IP 服务器 (Python)。这个问题的焦点在于服务器。目前我能够从客户端向服务器发送消息,服务器将消息返回给客户端。
过程和我想要归档的内容:
客户端:向服务器发送基于事件的消息(例如,当按钮 状态已更改)
服务器:当服务器收到来自客户端的消息时, 服务器应该不断地向客户端发送数据(例如发送 客户端每秒的当前传感器值)。服务器应该 也能够对来自客户端的新消息做出反应并做一些 其他的东西。
问题:
- 并行进程:服务器等待传入消息并且不能 做任何其他事情(数据= conn.recv(1024))。所以我无法发送 多条消息返回给客户端。
我的第一个想法是使用两个线程:
- 从客户端接收数据
- 向客户端发送多个数据
- MainLoop:启动线程,做其他事情
我的问题:我使用线程的方法是否正确?我在 TCP IP 和使用线程方面没有太多经验。谢谢您的帮助。
我当前的服务器代码:
from threading import Thread
import socket
data =''
HOST ='192.168.0.108' # Server IP or Hostname
PORT = 12345 # Pick an open Port (1000+ recommended), must match the client sport
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
def ReceiveAndSendData():
#managing error exception
try:
s.bind((HOST, PORT))
except socket.error:
print 'Bind failed '
print 'Wait for connection'
s.listen(5)
(conn, addr) = s.accept()
print 'Connected'
# awaiting for message
while True:
print'start'
try:
print 'awaiting data from GUI'
if not data: break
data = conn.recv(1024)
print 'Received data: ' + data
reply = 'Received data'
conn.send(reply)
except socket.error:
print 'Connection lost'
print 'Wait for connection'
s.listen(5)
(conn, addr) = s.accept()
print 'Connected'
conn.close() # Close connections
def Main():
t1 = Thread(target=ReceiveAndSendData)
t1.start()
print 'DoSomething'
if __name__ == '__main__':
Main()
【问题讨论】:
标签: python multithreading sockets tcp