Python多執行緒Socket程式例子
阿新 • • 發佈:2019-02-10
如果沒有multitask包,請從http://python-multitask.googlecode.com/files/multitask-0.2.0.zip
server端
Python程式碼
client端測試
Python程式碼
server端
Python程式碼
- from __future__ import with_statement
- from contextlib import closing
- import socket
- import multitask
- def client_handler(sock):
- with closing(sock):
- while True:
-
data = (yield
- if not data:
- break
- yield multitask.send(sock, data)
- def echo_server(hostname, port):
- addrinfo = socket.getaddrinfo(hostname, port,
- socket.AF_INET,
-
socket.SOCK_STREAM)
- (family, socketype, porot, canonname, sockaddr) = addrinfo[0]
- with closing(socket.socket(family,
- socketype,
- porot)) as sock:
- sock.setsockopt(socket.SOL_SOCKET,
- socket.SO_REUSEADDR, 1)
-
sock.bind(sockaddr)
- sock.listen(5)
- while True:
- multitask.add(client_handler((
- yield multitask.accept(sock))[0]))
- if __name__ == '__main__':
- import sys
- hostname = '192.168.2.102'
- port = 1111
- if len(sys.argv) > 1:
- hostname = sys.argv[1]
- if len(sys.argv) > 2:
- port = int(sys.argv[2])
- multitask.add(echo_server(hostname, port))
- try:
- multitask.run()
- except KeyboardInterrupt:
- pass
client端測試
Python程式碼
- import socket
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- sock.connect(('192.168.2.102', 1111))
- sock.send('hello')
- data = sock.recv(1024)
- sock.close()
- print 'Received', repr(data)