±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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ÇëÇóÊÇ·ñµÈ´ý¡£×èÈûºÍ·Ç×èÈûµÄÇø±ðÊÇÊý¾Ýû׼±¸ºÃµÄÇé¿öÏÂÊÇ·ñÁ¢¼´·µ»Ø¡£Í¬²½¿ÉÄÜÊÇ×èÈûµÄ£¬Ò²¿ÉÄÜÊÇ·Ç×èÈûµÄ£¬¶ø·Ç×èÈûµÄÓпÉÄÜÊÇͬ²½µÄ£¬Ò²ÓпÉÄÜÊÇÒì²½µÄ¡£
ÕâÀïÃæÆäÊµÉæ¼°µ½µÄ֪ʶµã»¹ºÜ¶à£¬ÕâÀïÖ»ÊÇÆ¾ÎҵļÇÒä¼òµ¥×ܽáÁËһϣ¬ÒÔºó»á²¹³ä¸ü¶à¡£ |