python網路程式設計02

2021-08-31 01:23:12 字數 2702 閱讀 7561

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 傳送...