tcp網路程式設計基礎

2021-08-31 07:45:29 字數 2504 閱讀 4395

1.tcp客戶端

from socket import *

# 建立socket

tcp_client_socket = socket(af_inet, sock_stream)

# 目的資訊

server_ip = input("請輸入伺服器ip:")

server_port = int(input("請輸入伺服器port:"))

# 鏈結伺服器

tcp_client_socket.connect((server_ip, server_port))

# 提示使用者輸入資料

send_data = input("請輸入要傳送的資料:")

tcp_client_socket.send(send_data.encode("gbk"))

# 接收對方傳送過來的資料,最大接收1024個位元組

recvdata = tcp_client_socket.recv(1024)

print('接收到的資料為:', recvdata.decode('gbk'))

# 關閉套接字

tcp_client_socket.close()

2.tcp伺服器

流程如下:

1.socket建立乙個套接字

2.bind繫結ip和port

3.listen使套接字變為可以被動鏈結

4.accept等待客戶端的鏈結

5.recv/send接收傳送資料

**如下:

from socket import *

# 建立socket

tcp_server_socket = socket(af_inet, sock_stream)

# 本地資訊(不寫ip預設本機127.0.0.1)

address = ('127.0.0.1', 7788)

# 繫結

tcp_server_socket.bind(address)

# 使用socket建立的套接字預設的屬性是主動的,使用listen將其變為被動的,這樣就可以接收別人的鏈結了

#監聽tcp_server_socket.listen(128)

# 如果有新的客戶端來鏈結伺服器,那麼就產生乙個新的套接字專門為這個客戶端服務

# client_socket用來為這個客戶端服務

# tcp_server_socket就可以省下來專門等待其他新客戶端的鏈結

client_socket, clientaddr = tcp_server_socket.accept()

# 接收對方傳送過來的資料

recv_data = client_socket.recv(1024) # 接收1024個位元組

print('接收到的資料為:', recv_data.decode('gbk'))

# 傳送一些資料到客戶端

client_socket.send("thank you !".encode('gbk'))

# 關閉為這個客戶端服務的套接字,只要關閉了,就意味著為不能再為這個客戶端服務了,如果還需要服務,只能再次重新連線

client_socket.close()

3.tcp的3次握手

client(客戶端連線connect)-------->server(服務端監聽listen)--------->client(服務端告訴客戶端鏈結已建立)---------->server(客戶端告訴服務端鏈結已建立)
4.tcp的4次揮手
client(客戶端告訴服務端要關閉鏈結close)

---->server(服務端告訴客戶端同意關閉鏈結close)

---->client(服務端告訴客戶端鏈結已關閉)

server---->client(服務端將最後的資料傳遞給客戶端)

---->server(設定超時等待,確保最後達到關閉狀態)

5.tcp長連線和短連線

tcp短連線

client 向 server 發起連線請求

server 接到請求,雙方建立連線

client 向 server 傳送訊息

server 回應 client

一次讀寫完成,此時雙方任何乙個都可以發起 close 操作

在步驟5中,一般都是 client 先發起 close 操作。當然也不排除有特殊的情況。

短連線一般只會在 client/server 間傳遞一次讀寫操作!

tcp長連線

client 向 server 發起連線

server 接到請求,雙方建立連線

client 向 server 傳送訊息

server 回應 client

一次讀寫完成,連線不關閉

後續讀寫操作…

長時間操作之後client發起關閉請求

TCP網路程式設計基礎

1 套接字結構 struct sockaddr 上述結構中協議族成員變數sa family的型別是sa family t,其實這個型別是unsigned short型別,因此成員變數sa family的長度為16位。typedef unsigned short sa family t 通用套接字結構...

java網路程式設計 TCP程式設計基礎 1

tcp網路程式設計是指利用socket類編寫通訊程式。分為客戶端與服務端 tcp採用 三次握手 進行執行 客戶端 socket socket new socket iinetaddress address,int prot 1 例項化socket套接字 2 通過socket物件呼叫輸出 輸入流並返回...

TCP網路程式設計

基於tcp 通訊模型 由上圖可以得出tcp通訊的步驟如下 服務端 1 建立乙個socket,用函式socket 2 繫結ip位址 埠等資訊到socket上,用函式bind 3 設定允許的最大連線數,用函式listen 4 等待來著客戶端的連線請求,用函式accept 5 收發資料,用函式send 和...