TCP socket實現客戶端和伺服器端通訊

2021-09-21 17:23:50 字數 1926 閱讀 6735

import socket

def main():

# 建立套接字

tcp_client_socket = socket.socket(socket.af_inet, socket.sock_stream)

# 目的資訊

server_ip = "127.0.0.1"

server_port = 60000

# 鏈結伺服器

tcp_client_socket.connect((server_ip, server_port)) # 元組 比udp多的部分

# 傳送資料

while true:

send_data = input("請輸入資料:")

if send_data == "exit":

break

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

recv_data = tcp_client_socket.recv(1024)

print(recv_data.decode('gbk'))

# 關閉套接字

tcp_client_socket.close()

print("斷開鏈結")

if __name__ == '__main__':

main()

import socket

def main():

# 建立伺服器套接字

tcp_server_socket = socket.socket(socket.af_inet, socket.sock_stream)

# 繫結位址埠(本地ip, 埠)

tcp_server_socket.bind(("", 9999))

# 監聽

tcp_server_socket.listen(128)

# 為多個客戶端服務

while true:

# 接收

tcp_new_socket, tcp_client_addr = tcp_server_socket.accept()

print("開始服務" + str(tcp_client_addr))

# (新的套接字用於處理client的請求, 新的套接字的位址)

# print(tcp_client_socket, tcp_client_addr)

# 為乙個客戶端服務多次

while true:

# 接收客戶端發過來的請求

recv_data = tcp_new_socket.recv(1024)

if recv_data:

print(str(tcp_client_addr)+"傳送:"+recv_data.decode('gbk'))

else:

break

# 返回客戶端乙個資料

tcp_new_socket.send("收到!".encode("gbk"))

# 關閉這個新套接字

tcp_new_socket.close()

print("服務" + str(tcp_client_addr) + "完畢")

# 關閉伺服器套接字

tcp_server_socket.close()

if __name__ == '__main__':

main()

這段**只實現了客戶端傳送一句,伺服器回一句。

客戶端流程圖:

socket建立套接字

connect鏈結

send/recv收發資料

close關閉套接字

伺服器端流程圖:

socket建立套接字

bind繫結位址埠

listen監聽

accept等待鏈結

send/recv收發資料

close關閉套接字

啟動TCP Socket客戶端

include stdafx.h include include include pragma comment lib,ws2 32.lib define buf size 64 int tmain int argc,tchar argv wsadatawsd socketshost sockadd...

胖客戶端 瘦客戶端和富客戶端

以c s結構開發的網路應用程式,需要為客戶端開發專用的客戶端軟體,相對而言其客戶端比較龐大,在客戶端可以實現很多功能,分擔伺服器的負擔,屬於胖客戶端型別。以b s結構開發的web應用,其客戶端只是乙個瀏覽器,所有業務邏輯由伺服器端進行處理,相對而言客戶端比較瘦小,故稱為瘦客戶端。目前比較流行的一種開...

非同步客戶端和同步客戶端

先寫下我的理解,方便後邊閱讀資料校驗。一 同步客戶端 比如乙個連線有兩個請求,請求1 和 請求2,請求1 先發起請求,請求2後發起請求,則請求2 要等待請求1 響應完成才能接收到響應。舉個棗子,httpclient 傳送get請求,執行緒會一致阻塞,直到有響應結果。二 非同步客戶端 比如乙個連線有兩...