Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
python²¢·¢±à³Ì(²¢·¢Óë²¢ÐУ¬Í¬²½ºÍÒì²½£¬×èÈûÓë·Ç×èÈû£©
 
  3005  次浏览      29
 2019-1-15
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcnblogs,ÎÄÕÂÖ÷Òª×ܽáÁËpython²¢·¢±à³Ì²¢·¢ºÍ²¢ÐУ¬Í¬²½ºÍÒì²½£¬×èÈûºÍ·Ç×èÈûµÈÏà¹ØÖªÊ¶¡£

×î½üÔÚѧpythonµÄÍøÂç±à³Ì£¬Ñ§ÁËsocketͨÐÅ£¬²¢ÀûÓÃsocketʵÏÖÁËÒ»¸ö¾ßÓÐÓû§ÑéÖ¤¹¦ÄÜ£¬¿ÉÒÔÉÏ´«ÏÂÔØÎļþ¡¢¿ÉÒÔʵÏÖÃüÁîÐй¦ÄÜ£¬´´½¨ºÍɾ³ýÎļþ¼Ð£¬¿ÉÒÔʵÏֵĶϵãÐø´«µÈ¹¦ÄܵÄFTP·þÎñÆ÷¡£µ«ÔÚÕâµ±ÖУ¬·¢ÏÖһЩ¸ÅÄîÇø·ÖÆðÀ´ºÜÄÑ£¬±ÈÈç²¢·¢ºÍ²¢ÐУ¬Í¬²½ºÍÒì²½£¬×èÈûºÍ·Ç×èÈû£¬µ«ÊÇÕâЩ¸ÅÄîÈ´ºÜÖØÒª¡£Òò´ËÔڴ˰ÑËü×ܽáÏÂÀ´¡£

1.²¢·¢ & ²¢ÐÐ

²¢·¢£ºÔÚ²Ù×÷ϵͳÖУ¬ÊÇÖ¸Ò»¸öʱ¼ä¶ÎÖÐÓм¸¸ö³ÌÐò¶¼´¦ÓÚÒÑÆô¶¯ÔËÐе½ÔËÐÐÍê±ÏÖ®¼ä£¬ÇÒÕ⼸¸ö³ÌÐò¶¼ÊÇÔÚͬһ¸ö´¦Àí»úÉÏÔËÐУ¬µ«ÈÎÒ»¸öʱ¿ÌµãÉÏÖ»ÓÐÒ»¸ö³ÌÐòÔÚ´¦Àí»úÉÏÔËÐС£¼òÑÔÖ®£¬ÊÇָϵͳ¾ßÓд¦Àí¶à¸öÈÎÎñµÄÄÜÁ¦¡£

²¢ÐУºµ±ÏµÍ³ÓÐÒ»¸öÒÔÉÏCPUʱ,ÔòÏ̵߳IJÙ×÷ÓпÉÄܷDz¢·¢¡£µ±Ò»¸öCPUÖ´ÐÐÒ»¸öÏß³Ìʱ£¬ÁíÒ»¸öCPU¿ÉÒÔÖ´ÐÐÁíÒ»¸öỊ̈߳¬Á½¸öÏ̻߳¥²»ÇÀÕ¼CPU×ÊÔ´£¬¿ÉÒÔͬʱ½øÐУ¬ÕâÖÖ·½Ê½ÎÒÃdzÆÖ®Îª²¢ÐÐ(Parallel)¡£¼òÑÔÖ®£¬ÊÇָϵͳ¾ßÓÐͬʱ´¦Àí¶à¸öÈÎÎñµÄÄÜÁ¦¡£

ÏÂÃæÎÒÃÇÀ´Á½¸öÀý×Ó£º

import threading #Ïß³Ì
import time


def music():
print('begin to listen music {}'.format(time.ctime()))
time.sleep(3)
print('stop to listen music {}'.format(time.ctime()))


def game():
print('begin to play game {}'.format(time.ctime()))
time.sleep(5)
print('stop to play game {}'.format(time.ctime()))


if __name__ == '__main__':
music()
game()
print('ending.....')

musicµÄʱ¼äΪ3Ã룬gameµÄʱ¼äΪ5Ã룬Èç¹û°´ÕÕÎÒÃÇÕý³£µÄÖ´ÐУ¬Ö±½ÓÖ´Ðк¯Êý£¬ÄÇô½«°´Ë³Ðò˳ÐòÖ´ÐУ¬Õû¸ö¹ý³Ì8Ãë¡£

import threading #Ïß³Ì
import time


def music():
print('begin to listen music {}'.format(time.ctime()))
time.sleep(3)
print('stop to listen music {}'.format(time.ctime()))


def game():
print('begin to play game {}'.format(time.ctime()))
time.sleep(5)
print('stop to play game {}'.format(time.ctime()))


if __name__ == '__main__':
t1 = threading.Thread(target=music) #´´½¨Ò»¸öÏ̶߳ÔÏót1 ×ÓÏß³Ì
t2 = threading.Thread(target=game) #´´½¨Ò»¸öÏ̶߳ÔÏót2 ×ÓÏß³Ì

t1.start()
t2.start()

# t1.join() #µÈ´ý×ÓÏß³ÌÖ´ÐÐÍê t1²»Ö´ÐÐÍ꣬˭Ҳ²»×¼ÍùÏÂ×ß
t2.join()

print('ending.......') #Ö÷Ïß³Ì
print(time.ctime())

ÔÚÕâ¸öÀý×ÓÖУ¬ÎÒÃÇ¿ªÁËÁ½¸öỊ̈߳¬½«musicºÍgameÁ½¸öº¯Êý·Ö±ðͨ¹ýÏß³ÌÖ´ÐУ¬ÔËÐнá¹ûÏÔʾÁ½¸öÏß³Ìͬʱ¿ªÊ¼£¬ÓÉÓÚÌýÒôÀÖʱ¼ä3Ãë£¬ÍæÓÎϷʱ¼ä5Ã룬ËùÒÔÕû¸ö¹ý³ÌÍê³Éʱ¼äΪ5Ãë¡£ÎÒÃÇ·¢ÏÖ£¬Í¨¹ý¿ªÆô¶à¸öỊ̈߳¬Ô­±¾8ÃëµÄʱ¼äËõ¶ÌΪ5Ã룬ԭ±¾Ë³ÐòÖ´ÐÐÏÖÔÚÊDz»ÊÇ¿´ÆðÀ´ºÃÏñÊDz¢ÐÐÖ´Ðеģ¿¿´ÆðÀ´ºÃÏñÊÇÕâÑù£¬ÌýÒôÀÖµÄͬʱÔÚÍæÓÎÏ·£¬Õû¸ö¹ý³ÌµÄʱ¼äËæ×µÄÈÎÎñʱ¼ä±ä»¯¡£µ«ÕæµÄÊÇÕâÑùÂð£¿ÄÇôÏÂÃæÎÒÀ´Ìá³öÒ»¸öGILËøµÄ¸ÅÄî¡£

GIL(È«¾Ö½âÊÍÆ÷Ëø£©£ºÎÞÂÛÄãÆô¶àÉÙ¸öỊ̈߳¬ÄãÓжàÉÙ¸öcpu, PythonÔÚÖ´ÐеÄʱºò»áµ­¶¨µÄÔÚͬһʱ¿ÌÖ»ÔÊÐíÒ»¸öÏß³ÌÔËÐС£

import time
from threading import Thread


def add():
sum = 0
i = 1
while i<=1000000:
sum += i
i += 1
print('sum:',sum)


def mul():
sum2 = 1
i = 1
while i<=100000:
sum2 = sum2 * i
i += 1
print('sum2:',sum2)


start = time.time()

add()
mul() #´®ÐбȶàÏ̻߳¹¿ì

print('cost time %s'%(time.time()-start))

import time
from threading import Thread


def add():
sum = 0
i = 1
while i<=1000000:
sum += i
i += 1
print('sum:',sum)


def mul():
sum2 = 1
i = 1
while i<=100000:
sum2 = sum2 * i
i += 1
print('sum2:',sum2)


start = time.time()
t1 = Thread(target=add)
t2 = Thread(target=mul)

l = []
l.append(t1)
l.append(t2)

for t in l:
t.start()

for t in l:
t.join()

print('cost time %s'%(time.time()-start))

°¥ßº£¬ÕâÊÇÔõô»ØÊ£¬´®ÐÐÖ´ÐбȶàÏ̻߳¹¿ì£¿²»·ûºÏ³£Àíѽ¡£ÊDz»Êǵ߸²ÁËÄãµÄÈËÉú¹Û£¬Õâ¸ö¾ÍºÍGILËøÓйأ¬Í¬Ò»Ê±¿Ì£¬ÏµÍ³Ö»ÔÊÐíÒ»¸öÏß³ÌÖ´ÐУ¬ÄÇô£¬¾ÍÊÇ˵£¬±¾ÖÊÉÏÎÒÃÇ֮ǰÀí½âµÄ¶àÏ̵߳IJ¢ÐÐÊDz»´æÔڵģ¬ÄÇô֮ǰµÄÀý×ÓΪʲôʱ¼äȷʵËõ¶ÌÁËÄØ£¿ÕâÀïÓÐÉæ¼°µ½Ò»¸öÈÎÎñµÄÀàÐÍ¡£

--ÈÎÎñ£º 1.IOÃܼ¯ÐÍ£¨»áÓÐcpu¿ÕÏеÄʱ¼ä£© ×¢£ºsleepµÈͬÓÚIO²Ù×÷£¬ socketͨÐÅÒ²ÊÇIO

2.¼ÆËãÃܼ¯ÐÍ

¶øÖ®Ç°ÄǸöÀý×ÓÇ¡ºÃÊÇIOÃܼ¯Ð͵ÄÀý×Ó£¬ºóÃæÕâ¸öÓÉÓÚÉæ¼°µ½Á˼ӷ¨ºÍ³Ë·¨£¬ÊôÓÚ¼ÆËãÃܼ¯ÐͲÙ×÷£¬ÄÇô£¬¾Í²úÉúÁËÒ»¸ö½áÂÛ£¬¶àÏ̶߳ÔÓÚIOÃܼ¯ÐÍÈÎÎñÓÐ×÷Óã¬

¶ø¼ÆËãÃܼ¯ÐÍÈÎÎñ²»ÍƼöʹÓöàÏ̡߳£

¶øÆäÖÐÎÒÃÇ»¹¿ÉÒԵõ½Ò»¸ö½áÂÛ£ºÓÉÓÚGILËø£¬¶àÏ̲߳»¿ÉÄÜÕæÕýʵÏÖ²¢ÐУ¬ËùνµÄ²¢ÐÐÒ²Ö»ÊǺê¹ÛÉϲ¢ÐÐ΢¹ÛÉϲ¢·¢£¬±¾ÖÊÉÏÊÇÓÉÓÚÓöµ½io²Ù×÷²»¶ÏµÄcpuÇл»

ËùÔì³É²¢ÐеÄÏÖÏó¡£ÓÉÓÚcpuÇл»Ëٶȼ«¿ì£¬ËùÒÔ¿´ÆðÀ´¾ÍÏñÊÇÔÚͬʱִÐС£

--ÎÊÌ⣺ûÓÐÀûÓöàºËµÄÓÅÊÆ

--Õâ¾ÍÔì³ÉÁ˶àÏ̲߳»ÄÜͬʱִÐУ¬²¢ÇÒÔö¼ÓÁËÇл»µÄ¿ªÏú£¬´®ÐеÄЧÂÊ¿ÉÄܸü¸ß¡£

2.ͬ²½ & Òì²½

¶ÔÓÚÒ»´ÎIO·ÃÎÊ£¨ÒÔread¾ÙÀý£©£¬Êý¾Ý»áÏȱ»¿½±´µ½²Ù×÷ϵͳÄں˵Ļº³åÇøÖУ¬È»ºó²Å»á´Ó²Ù×÷ϵͳÄں˵Ļº³åÇø¿½±´µ½Ó¦ÓóÌÐòµÄµØÖ·¿Õ¼ä¡£ËùÒÔ˵£¬µ±Ò»¸öread²Ù×÷·¢Éúʱ£¬Ëü»á¾­ÀúÁ½¸ö½×¶Î£º

1. µÈ´ýÊý¾Ý×¼±¸ (Waiting for the data to be ready)

2. ½«Êý¾Ý´ÓÄں˿½±´µ½½ø³ÌÖÐ (Copying the data from the kernel to the process)

ͬ²½£ºµ±½ø³ÌÖ´ÐÐIO(µÈ´ýÍⲿÊý¾Ý£©µÄʱºò£¬-----µÈ¡£Í¬²½£¨ÀýÈç´òµç»°µÄʱºò±ØÐëµÈ£©

Òì²½£ºµ±½ø³ÌÖ´ÐÐIO(µÈ´ýÍⲿÊý¾Ý£©µÄʱºò£¬-----²»µÈ£¬È¥Ö´ÐÐÆäËûÈÎÎñ£¬Ò»Ö±µÈµ½Êý¾Ý½ÓÊճɹ¦£¬ÔÙ»ØÀ´´¦Àí¡£Òì²½£¨ÀýÈç·¢¶ÌÐÅ£©

µ±ÎÒÃÇÈ¥ÅÀȡһ¸öÍøÒ³µÄʱºò£¬ÒªÅÀÈ¡¶à¸öÍøÕ¾£¬ÓÐЩÈË¿ÉÄܻᷢÆð¶à¸öÇëÇó£¬È»ºóͨ¹ýº¯Êý˳Ðòµ÷Óá£Ö´ÐÐ˳ÐòÒ²ÊÇÏȵ÷ÓÃÏÈÖ´ÐС£Ð§Âʷdz£µÍ¡£

ÏÂÃæÎÒÃÇ¿´Ò»ÏÂÒì²½µÄÒ»¸öÀý×Ó£º

import socket
import select
"""
########httpÇëÇó±¾ÖÊ£¬IO×èÈû########
sk = socket.socket()
#1.Á¬½Ó
sk.connect(('www.baidu.com',80,)) #×èÈû
print('Á¬½Ó³É¹¦ÁË')
#2.Á¬½Ó³É¹¦ºó·¢ËÍÏûÏ¢
sk.send(b"GET / HTTP/1.0\r\nHost: baidu.com\r\n\r\n")

#3.µÈ´ý·þÎñ¶ËÏìÓ¦
data = sk.recv(8096)#×èÈû
print(data) #\r\n\r\nÇø·ÖÏìӦͷºÍÓ°ÏìÌå

#¹Ø±ÕÁ¬½Ó
sk.close()
"""
"""
########httpÇëÇó±¾ÖÊ£¬IO·Ç×èÈû########
sk = socket.socket()
sk.setblocking(False)
#1.Á¬½Ó
try:
sk.connect(('www.baidu.com',80,)) #·Ç×èÈû£¬µ«»á±¨´í
print('Á¬½Ó³É¹¦ÁË')
except BlockingIOError as e:
print(e)

#2.Á¬½Ó³É¹¦ºó·¢ËÍÏûÏ¢
sk.send(b"GET / HTTP/1.0\r\nHost: baidu.com\r\n\r\n")

#3.µÈ´ý·þÎñ¶ËÏìÓ¦
data = sk.recv(8096)#×èÈû
print(data) #\r\n\r\nÇø·ÖÏìӦͷºÍÓ°ÏìÌå

#¹Ø±ÕÁ¬½Ó
sk.close()
"""


class HttpRequest:
def __init__(self,sk,host,callback):
self.socket = sk
self.host = host
self.callback = callback

def fileno(self):
return self.socket.fileno()


class HttpResponse:
def __init__(self,recv_data):
self.recv_data = recv_data
self.header_dict = {}
self.body = None

self.initialize()

def initialize(self):
headers, body = self.recv_data.split(b'\r\n\r\n', 1)
self.body = body
header_list = headers.split(b'\r\n')
for h in header_list:
h_str = str(h,encoding='utf-8')
v = h_str.split(':',1)
if len(v) == 2:
self.header_dict[v[0]] = v[1]


class AsyncRequest:
def __init__(self):
self.conn = []
self.connection = [] # ÓÃÓÚ¼ì²âÊÇ·ñÒѾ­Á¬½Ó³É¹¦

def add_request(self,host,callback):
try:
sk = socket.socket()
sk.setblocking(0)
sk.connect((host,80))
except BlockingIOError as e:
pass
request = HttpRequest(sk,host,callback)
self.conn.append(request)
self.connection.append(request)

def run(self):

while True:
rlist,wlist,elist = select.select(self.conn,self.connection,self.conn,0.05)
for w in wlist:
print(w.host,'Á¬½Ó³É¹¦...')
# Ö»ÒªÄÜÑ­»·µ½£¬±íʾsocketºÍ·þÎñÆ÷¶ËÒѾ­Á¬½Ó³É¹¦
tpl = "GET / HTTP/1.0\r\nHost:%s\r\n\r\n" %(w.host,)
w.socket.send(bytes(tpl,encoding='utf-8'))
self.connection.remove(w)
for r in rlist:
# r,ÊÇHttpRequest
recv_data = bytes()
while True:
try:
chunck = r.socket.recv(8096)
recv_data += chunck
except Exception as e:
break
response = HttpResponse(recv_data)
r.callback(response)
r.socket.close()
self.conn.remove(r)
if len(self.conn) == 0:
break


def f1(response):
print('±£´æµ½Îļþ',response.header_dict)


def f2(response):
print('±£´æµ½Êý¾Ý¿â', response.header_dict)


url_list = [
{'host':'www.youku.com','callback': f1},
{'host':'v.qq.com','callback': f2},
{'host':'www.cnblogs.com','callback': f2},
]

req = AsyncRequest()
for item in url_list:
req.add_request(item['host'],item['callback'])

req.run()

ÎÒÃÇ¿ÉÒÔ¿´µ½£¬Èý¸öÇëÇó·¢ËÍ˳ÐòÓë·µ»ØË³Ðò£¬²¢²»Ò»Ñù£¬ÕâÑù¾ÍÌåÏÖÁËÒì²½ÇëÇó¡£¼´ÎÒͬʱ½«ÇëÇó·¢ËͳöÈ¥£¬ÄĸöÏÈ»ØÀ´ÎÒÏÈ´¦ÀíÄĸö¡£

¼´ÎÒÃÇ¿ÉÒÔÀí½âΪ£ºÎÒ´òµç»°µÄʱºòÖ»ÔÊÐíºÍÒ»¸öÈËͨÐÅ£¬ºÍÕâ¸öÈËͨÐŽáÊøÖ®ºó²ÅÔÊÐíºÍÁíÒ»¸öÈË¿ªÊ¼¡£Õâ¾ÍÊÇͬ²½¡£

ÎÒÃÇ·¢¶ÌÐŵÄʱºò·¢Íê¿ÉÒÔ²»È¥µÈ´ý£¬È¥´¦ÀíÆäËûÊÂÇ飬µ±Ëû»Ø¸´Ö®ºóÎÒÃÇÔÙÈ¥´¦Àí£¬ÕâÑù¾Í´ó´ó½â·ÅÁËÎÒÃǵÄʱ¼ä¡£Õâ¾ÍÊÇÒì²½¡£

ÌåÏÖÔÚÍøÒ³ÇëÇóÉÏÃæ¾ÍÊÇÎÒÇëÇóÒ»¸öÍøÒ³Ê±ºòµÈ´ýËû»Ø¸´£¬·ñÔò²»½ÓÊÕÆäËüÇëÇó£¬Õâ¾ÍÊÇͬ²½¡£ÁíÒ»ÖÖ¾ÍÊÇÎÒ·¢ËÍÇëÇóÖ®ºó²»È¥µÈ´ýËûÊÇ·ñ»Ø¸´£¬¶øÈ¥´¦ÀíÆäËüÇëÇ󣬵±´¦ÀíÍêÆäËûÇëÇóÖ®ºó£¬Ä³¸öÇëÇó˵£¬ÎҵĻظ´ÁË£¬È»ºó³ÌÐòת¶øÈ¥´¦ÀíËûµÄ»Ø¸´Êý¾Ý¡£Õâ¾ÍÊÇÒì²½ÇëÇó¡£ËùÒÔ£¬Òì²½¿ÉÒÔ³ä·ÖcpuµÄЧÂÊ¡£

3.×èÈû & ·Ç×èÈû

µ÷ÓÃblocking IO»áÒ»Ö±blockס¶ÔÓ¦µÄ½ø³ÌÖ±µ½²Ù×÷Íê³É£¬¶ønon-blocking IOÔÚkernel»¹×¼±¸Êý¾ÝµÄÇé¿öÏ»áÁ¢¿Ì·µ»Ø¡£

ÏÂÃæÎÒÃÇͨ¹ýsocketʵÏÖÒ»¸öÃüÁîÐй¦ÄÜÀ´¸ÐÊÜһϡ£

#·þÎñ¶Ë
from socket import *
import subprocess
import struct

ip_port = ('127.0.0.1', 8000)
buffer_size = 1024
backlog = 5

tcp_server = socket(AF_INET, SOCK_STREAM)
tcp_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #¾ÍÊÇËü£¬ÔÚbindǰ¼Ó
tcp_server.bind(ip_port)
tcp_server.listen(backlog)

while True:
conn, addr = tcp_server.accept()
print('еĿͻ§¶ËÁ´½Ó£º', addr)
while True:
try:
cmd = conn.recv(buffer_size)
print('ÊÕµ½¿Í»§¶ËÃüÁî:', cmd.decode('utf-8'))

#Ö´ÐÐÃüÁîcmd£¬µÃµ½ÃüÁîµÄ½á¹ûcmd_res
res = subprocess.Popen(cmd.decode('utf-8'),shell=True,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
)
err = res.stderr.read()
if err:
cmd_res = err
else:
cmd_res = res.stdout.read()
if not cmd_res:
cmd_res = 'Ö´Ðгɹ¦'.encode('gbk')
#½â¾öÕ³°ü
length = len(cmd_res)
data_length = struct.pack('i',length)
conn.send(data_length)
conn.send(cmd_res)
except Exception as e:
print(e)
break
conn.close()


#¿Í»§¶Ë
from socket import *

ip_port = ('127.0.0.1',8000)
buffer_size = 1024
backlog = 5

tcp_client = socket(AF_INET,SOCK_STREAM)
tcp_client.connect(ip_port)

while True:
cmd = input('>>:').strip()
if not cmd:
continue
if cmd == 'quit':
break
tcp_client.send(cmd.encode('utf-8'))

#½â¾öÕ³°ü
length = tcp_client.recv(4)
length = struct.unpack('i',length)[0]

recv_size = 0
recv_msg = b''
while recv_size < length:
recv_msg += tcp_client.recv(buffer_size)
recv_size = len(recv_msg)

print(recv_msg.decode('gbk'))

¿ªÆôÁË·þÎñÆ÷ºÍÒ»¸ö¿Í»§¶ËÖ®ºó£¬ÎÒÃÇÔÚ¿Í»§¶ËÊäÈëһЩÃüÁȻºóÕýÈ·ÏÔʾ£¬¹¦ÄÜʵÏÖ¡£ÕâÊÇÔÚÎÒÔÙ´ò¿ªÒ»¸ö¿Í»§¶Ë£¬ÊäÈëÃüÁ·¢ÏÖ·þÎñÆ÷³Ù³ÙûÓÐÏìÓ¦¡£

Õâ¸ö¾ÍÊǵ±Ò»¸ö¿Í»§¶ËÔÚÇëÇóµÄʱºò£¬µ±Õâ¸ö¿Í»§¶ËûÓнáÊøµÄʱºò£¬·þÎñÆ÷²»»áÈ¥´¦ÀíÆäËû¿Í»§¶ËµÄÇëÇó¡£Õâʱºò¾Í×èÈûÁË¡£

ÈçºÎÈ÷þÎñÆ÷ͬʱ´¦Àí¶à¸ö¿Í»§¶ËÇëÇóÄØ£¿

#·þÎñ¶Ë
import socketserver

class Myserver(socketserver.BaseRequestHandler):
"""socketserverÄÚÖõÄͨÐÅ·½·¨"""
def handle(self):
print('conn is:',self.request) #conn
print('addr is:',self.client_address) #addr

while True:
try:
#·¢ÏûÏ¢
data = self.request.recv(1024)
if not data:break
print('ÊÕµ½µÄ¿Í»§¶ËÏûÏ¢ÊÇ:',data.decode('utf-8'),self.client_address)

#·¢ÏûÏ¢
self.request.sendall(data.upper())
except Exception as e:
print(e)
break


if __name__ == '__main__':
s = socketserver.ThreadingTCPServer(('127.0.0.1',8000), Myserver) #ͨÐÅÑ­»·
# s = socketserver.ForkingTCPServer(('127.0.0.1',8000), Myserver) #ͨÐÅÑ­»·
print(s.server_address)
print(s.RequestHandlerClass)
print(Myserver)
print(s.socket)
s.serve_forever()

#¿Í»§¶Ë

from socket import *

ip_port = ('127.0.0.1',8000)
buffer_size = 1024
backlog = 5

tcp_client = socket(AF_INET,SOCK_STREAM)
tcp_client.connect(ip_port)

while True:
msg = input('>>:').strip()
if not msg:continue
if msg == 'quit':break

tcp_client.send(msg.encode('utf-8'))

data = tcp_client.recv(buffer_size)
print(data.decode('utf-8'))

tcp_client.close()

 

Õâ¶Î´úÂëͨ¹ýsocketserverÄ£¿éʵÏÖÁËsocketµÄ²¢·¢¡£Õâ¸ö¹ý³ÌÖУ¬µ±Ò»¸ö¿Í»§¶ËÔÚÏò·þÎñÆ÷ÇëÇóµÄʱºò£¬ÁíÒ»¸ö¿Í»§¶ËÒ²¿ÉÒÔÕý³£ÇëÇó¡£·þÎñÆ÷ÔÚ´¦ÀíÒ»¸ö¿Í»§¶ËÇëÇóµÄʱºò£¬ÁíÒ»¸öÇëÇóûÓб»×èÈû¡£

×ܽ᣺ֻҪÓÐÒ»¶¡µã×èÈû£¬¾ÍÊÇ×èÈûIO¡£

Òì²½IOµÄÌØµã¾ÍÊÇÈ«³ÌÎÞ×èÈû¡£

ÓÐЩÈ˳£°Ñͬ²½×èÈûºÍÒì²½·Ç×èÈûÁªÏµÆðÀ´£¬µ«Êµ¼ÊÉϾ­¹ý·ÖÎö£¬×èÈûÓëͬ²½£¬·Ç×èÈûºÍÒì²½µÄ¶¨ÒåÊDz»Ò»ÑùµÄ¡£Í¬²½ºÍÒì²½µÄÇø±ðÊÇÓöµ½IOÇëÇóÊÇ·ñµÈ´ý¡£×èÈûºÍ·Ç×èÈûµÄÇø±ðÊÇÊý¾Ýû׼±¸ºÃµÄÇé¿öÏÂÊÇ·ñÁ¢¼´·µ»Ø¡£Í¬²½¿ÉÄÜÊÇ×èÈûµÄ£¬Ò²¿ÉÄÜÊÇ·Ç×èÈûµÄ£¬¶ø·Ç×èÈûµÄÓпÉÄÜÊÇͬ²½µÄ£¬Ò²ÓпÉÄÜÊÇÒì²½µÄ¡£

ÕâÀïÃæÆäÊµÉæ¼°µ½µÄ֪ʶµã»¹ºÜ¶à£¬ÕâÀïÖ»ÊÇÆ¾ÎҵļÇÒä¼òµ¥×ܽáÁËһϣ¬ÒÔºó»á²¹³ä¸ü¶à¡£

   
3005 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ