服务器:
import socketimport threadingserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.bind(('0.0.0.0', 8000))server.listen()def handle_sock(sock, addr): while True: data = sock.recv(1024) print(data.decode("utf8")) re_data = input() sock.send(re_data.encode("utf8"))#获取从客户端发送的数据#一次获取1k的数据while True: sock, addr = server.accept() #用线程去处理新接收的连接(用户) client_thread = threading.Thread(target=handle_sock, args=(sock, addr)) client_thread.start()
客户端:
import socketclient = socket.socket(socket.AF_INET,socket.SOCK_STREAM)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"))
socket模拟http请求:
import socketfrom urllib.parse import urlparsedef get_url(url): #通过socket请求html url = urlparse(url) host = url.netloc path = url.path if path == "": path = "/" #建立socket连接 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((host, 80)) #阻塞不会消耗cpu #不停的询问连接是否建立好, 需要while循环不停的去检查状态 #做计算任务或者再次发起其他的连接请求 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 += d else: break data = data.decode("utf8") html_data = data.split("\r\n\r\n")[1] print(html_data) client.close()if __name__ == "__main__": import time start_time = time.time() for url in range(20): url = "http://shop.projectsedu.com/goods/{}/".format(url) get_url(url) print(time.time()-start_time)
socker类型介绍: