gj10 python socket编程
生活随笔
收集整理的這篇文章主要介紹了
gj10 python socket编程
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
10.1 HTTP、Socket、TCP這幾個(gè)概念
?? 五層網(wǎng)絡(luò)模型
socket 不屬于任何協(xié)議,是一個(gè)API,通過(guò)socket 可以和傳輸層的打交道,然后在之上可以實(shí)現(xiàn)自己的功能和協(xié)議
10.2 client和server實(shí)現(xiàn)通信
Socket編程
http 是短連接無(wú)狀態(tài)
10.3 socket實(shí)現(xiàn)聊天和多用戶連接
import socket import threadingserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('127.0.0.1', 8000)) server.listen(5)def handle_sock(sock, addr):while True:data = sock.recv(1024)print(data.decode("utf8"))re_data = input("s>>>")sock.send(re_data.encode("utf8"))# 獲取從客戶端發(fā)送的數(shù)據(jù) # 一次獲取1k的數(shù)據(jù) while True:sock, addr = server.accept()# 用線程去處理新接收的連接(用戶)client_thread = threading.Thread(target=handle_sock, args=(sock, addr))client_thread.start()# data = sock.recv(1024)# print(data.decode("utf8"))# re_data = input()# sock.send(re_data.encode("utf8"))# server.close()# sock.close() import socketclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # ipv4 tcp client.connect(('127.0.0.1', 8000)) while True:re_data = input(">>>")client.send(re_data.encode("utf8"))data = client.recv(1024)print(data.decode("utf8")) # client.send("bobby".encode("utf8")) # data = client.recv(1024) # print (data.decode("utf8")) # client.close()10.4 socket模擬http請(qǐng)求
#requests -> urlib -> socket import socket from urllib.parse import urlparsedef get_url(url):#通過(guò)socket請(qǐng)求htmlurl = urlparse(url)host = url.netlocpath = url.pathif path == "":path = "/"#建立socket連接client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# client.setblocking(False)client.connect((host, 80)) #阻塞不會(huì)消耗cpu#不停的詢問(wèn)連接是否建立好, 需要while循環(huán)不停的去檢查狀態(tài)#做計(jì)算任務(wù)或者再次發(fā)起其他的連接請(qǐng)求client.send("GET {} HTTP/1.1\r\nHost:{}\r\nConnection:close\r\n\r\n".format(path, host).encode("utf8"))data = b""while True:d = client.recv(1024)if d:data += delse:breakdata = data.decode("utf8")html_data = data.split("\r\n\r\n")[1]print(html_data)client.close()if __name__ == "__main__":import timestart_time = time.time()# for url in range(20):# # url = "http://www.baidu.com/?goods/{}/".format(url)# # get_url(url)url = "http://www.baidu.com"get_url(url)print(time.time()-start_time)-
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的gj10 python socket编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: gj9 迭代器和生成器
- 下一篇: 第9章 Python Web 框架考察点