您的位置:首页 > 编程语言 > Python开发

Python 的 Socket 编程多线程教程

2015-04-14 13:58 531 查看
server

import socket
import threading
import SocketServer
import json, types,string
import os, time

#server handler
def test(self):
return HttpResponse(self.request.META['REMOTE_ADDR'])

class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request.recv(1024)
jdata = json.JSONDecoder().decode(data)
print "Client : '%r'"% jdata['content']

jresp = json.JSONEncoder().encode(jdata)
self.request.sendall(jresp)

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
pass

if __name__ == "__main__":
# Port 0 means to select an arbitrary unused port
#print test()
HOST, PORT = "localhost", 50001

SocketServer.TCPServer.allow_reuse_address = True
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address

# Start a thread with the server -- that thread will then start one
# more thread for each request
server_thread = threading.Thread(target=server.serve_forever)

# Exit the server thread when the main thread terminates
server_thread.daemon = True
server_thread.start()
print "Server loop running in thread:", server_thread.name
print " .... waiting for connection"

# Activate the server; this will keep running until you
# interrupt the program with Ctrl-C
server.serve_forever()


client

import socket
import threading
import SocketServer
import json

#HeartBeat  and the Inational
def client(ip, port, message):
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.setdefaulttimeout(1)
except socket.error, msg:
print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1]
sys.exit();

try:
remote_ip = socket.gethostbyname( ip )

except socket.gaierror:
#could not resolve
print 'Hostname could not be resolved. Exiting'
sys.exit()
try:
sock.connect((ip, port))
print "Client: {}".format(message)
try:
content_msg={'content':message}
json_msg=json.JSONEncoder().encode(content_msg)
sock.sendall(json_msg)
except socket.error:
#Send failed
print 'Send failed'
sys.exit()
response = sock.recv(1024)
if len(response)!=0:
jresp = json.JSONDecoder().decode(response)
#jresp = json.loads(response)

print "Server: ",jresp['content']
return jresp
else:

return False
sock.close()

#print jresp[0]['src']
except:
print 'Connect failed'

client('localhost', 50001, 'ddddddd')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: