C/S結構瞭解 所謂的C/S就是客戶端(client)和伺服器端(server)的簡稱,也就是在基於這個的基礎上編寫相關的代碼;一個就是客戶端一個就是服務端。 TCP(client) 客戶端編寫 因為是在Python2.7的版本所以使用該socket包 import socket 定義地址和埠 t ...
C/S結構瞭解
所謂的C/S就是客戶端(client)和伺服器端(server)的簡稱,也就是在基於這個的基礎上編寫相關的代碼;一個就是客戶端一個就是服務端。
TCP(client) 客戶端編寫
#因為是在Python2.7的版本所以使用該socket包
import socket
#定義地址和埠
target_host = "127.0.0.1"
target_port = 9999
#編寫套接字定義協議和tcp
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#從包中調用connect函數鏈接伺服器埠和地址
s.connect((target_host,target_port))
#向伺服器端發送一條信息
s.send("I am TCP.")
#recv函數接收返回信息
response = s.recv(1024)
#列印返回信息
print response
這裡有幾點註意:socket里的兩個參數AF_INET表示的是使用IPV4協議,SOCK_STREAM表示使用TCP協議
TCP(server) 服務端編寫
import socket
import threading
#監聽的埠和地址
bind_ip = "127.0.0.1"
bind_port = 9999
#同上
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#監聽該埠和地址
s.bind((bind_ip,bind_port))
#最大連接數
s.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:
#把接受到的數據放到addr數組裡
client, addr = s.accept()
print "[*] Accepted connection from:%s:%d" %(addr[0], addr[1])
client_handler = threading.Thread(target=handle_client,args=(client,))
client_handler.start()
代碼實現過程中遇到的問題
代碼實現過程中遇到了一個socket error[10061]的報錯,具體查看了下源代碼,發現是伺服器端和客戶端的埠號不一致導致的。但是也不知道為什麼,本地使用ping監測該埠居然顯示關閉的情況下,客戶端也可以鏈接成功。有待進一步琢磨。
小結
簡單來說,該兩個模式下的代碼思路
TCP client
- 創建地址和Ip
- 創建一個套接字定義協議
- 連接伺服器
- 發送數據
- 接受回執信息
TCP server
- 創建套接字定義協議
- 監聽埠
- 設定最大連接數
- 列印相關信息