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請求,執行緒會一致阻塞,直到有響應結果。二 非同步客戶端 比如乙個連線有兩...