tcp1.tcp通訊,實現tcp的套接字客戶端
import socket
def main():
#1.建立tcp的套接字
tcp_socket = socket.socket(socket.af_inet,socket.sock_stream)
#2.鏈結伺服器
server_ip = input("請輸入要鏈結的伺服器的ip:")
server_port=int(input("請輸入要鏈結的伺服器的埠port:"))
server_addr = (server_ip,server_port)
tcp_socket.connect(server_addr)
#3.傳送資料/接受資料
send_data=input("請輸入要傳送的資料:")
tcp_socket.send(send_data.encode("utf-8"))
tcp_socket.close()
if __name__=="__main__":
main()
2.實現服務端
import socket
def main():
#1.買個手機(建立套接字 socket)
tcp_server_socket = socket.socket(socket.af_inet,socket.sock_stream)
#2.插入手機卡(繫結本地資訊 bind)
tcp_server_socket.bind("",7788)
#3.將手機設定為正常的 響鈴模式(讓預設的套接字由主動變為被動)
tcp_server_socket.listen(128)
print("--------1---------")
#4.等待別人的**到來(等待客戶端的鏈結 accept)
new_client_socket,client_addr = tcp_server_socket.accept()
print("-----2----")
print(client_addr)
#接受客戶端傳送過來的的請求
recv_data = new_client_socket.recv(1024)
print(recv_data)
#回送一部分資料給客戶端
new_client_socket.send("hahahahaha-------0k---".encode("utf-8"))
#關閉套接字
new_client_socket.close()
tcp_server_socket.close()
tcp和udp不同,安全的同時也比較麻煩。多了connet和accept。
為多個客戶端服務的**如下,將上面的**修改下
import socket
def main():
#1.買個手機(建立套接字 socket)
tcp_server_socket = socket.socket(socket.af_inet,socket.sock_stream)
#2.插入手機卡(繫結本地資訊 bind)
tcp_server_socket.bind(("", 9999))
#3.將手機設定為正常的 響鈴模式(讓預設的套接字由主動變為被動)
tcp_server_socket.listen(128)
#外面的迴圈為多個客戶端服務
while true:
print("等待乙個新的客戶的到來.....")
#4.等待別人的**到來(等待客戶端的鏈結 accept)
new_client_socket, client_addr = tcp_server_socket.accept()
print("乙個新的客戶端到來%s" % str(client_addr))
#接受客戶端傳送過來的的請求
#內迴圈為同乙個客戶服務多次
while true:
recv_data = new_client_socket.recv(1024)
print("客戶端傳送過來的請求是:%s" % recv_data)
#關閉套接字
#如果recv解讀塞有兩種情況
#1.close 2.傳送資料
if recv_data:
# 回送一部分資料給客戶端
new_client_socket.send("hahahahaha-------0k---".encode("utf-8"))
else:
break
new_client_socket.close()
print("伺服器已經為這個客戶端服務完畢....")
tcp_server_socket.close()
if __name__ =="__main__":
main()
使用兩個while迴圈,
外面的迴圈實現為多個客戶端服務,內迴圈為乙個客戶端進行多次服務。
同時判斷乙個客戶是否服務完了,要看 recv_data = new_client_socket.recv(1024)
其中recv_data是否為空,客戶如果服務完了會呼叫close,返回的recv_data就是空的,如果客戶繼續發訊息recv_data就不為空,不存在傳送的訊息為空的情況。
python 網路程式設計 02
1 server端 首先我們看下乙個最簡單http服務端 sock socket.socket socket.af inet,socket.sock stream 建立socket物件 sock.bind localhost 8000 監聽 sock.listen 5 while true conn...
python 網路程式設計 02 粘包
思考 什麼是粘包?同時執行多條命令之後,得到的結果很可能只有一部分,在執行其他命令的時候又接收到之前執行的另外一部分結果,這種顯現就是粘包。例如 send b 123 send b abc recv 4 1234 應該接收123 recv 4 bc 應該接收abc或者傳送的資料量大,一次沒有接收完,...
網路程式設計02 併發理論
import socket s socket.socket 建立網路傳輸,預設tcp協議 s.bind ip port 繫結ip 埠 s.listen 5 半連線池 sock,addr s.accept 監聽,三次握手的lisent態 sock.recv 1024 接收內容 sock.send 傳送...