以此紀錄 python 學習範例 – TCP Server / Client
使用的是 python 2.7.2
TCP Server
建立本機 TCP socket Server,默認使用 port 9999,並 listen all
#!/usr/bin/python #coding=UTF-8 """ TCP/IP Server sample """ import socket import threading bind_ip = "0.0.0.0" bind_port = 9999 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((bind_ip, bind_port)) server.listen(5) print "[*] Listening on %s:%d" % (bind_ip, bind_port) def handle_client(client_socket): request = client_socket.recv(1024) print "[*] Received: %s" % request client_socket.send("ACK!") client_socket.close() while True: client, addr = server.accept() print "[*] Acepted connection from: %s:%d" % (addr[0],addr[1]) client_handler = threading.Thread(target=handle_client, args=(client,)) client_handler.start()
用 AF_INET 和 SOCK_STREAM 宣告這是 TCP / IPv4 的連線,並且連線限制為 5,while 開始迴圈等待連線,並且啟動 client_handler 處理用戶的資料存放到 client(socket info) , addr(remote info),使用 thread 建立新的連線
handle_client 則處理用戶端的 request 並且發一則訊息給用戶端。
TCP Client
用 AF_INET 代表使用 IPv4 位址或名稱,SOCK_STREAM 代表這是一個 TCP client
#!/usr/bin/python #coding=UTF-8 """ TCP Client sample """ import socket target_host = "www.google.com" target_port = 80 # create socket # AF_INET 代表使用標準 IPv4 位址或主機名稱 # SOCK_STREAM 代表這會是一個 TCP client client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # client 建立連線 client.connect((target_host, target_port)) # 傳送資料給 target client.send("GET / HTTP/1.1\r\nHost: google.com\r\n\r\n") # 接收資料 response = client.recv(4096) # 印出資料信息 print response