# -*-coding:utf-8 -*-
import socket
import threading
print('Hello world')
if __name__ == '__main__':
# 1.創建tcp服務端套接字物件
# socket()函式的引數說明:
# AF_INET:協議族引數,AF_INET決定了socket的地址型別為ipv4地址(32位的)與埠號(16位的)的組合
# SOCK_STREAM: 套接字型別引數,SOCK_STREAM決定了socket接受資料格式為stream(流)
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 設定埠號復用,讓服務端程式退出后,埠號立即釋放
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 2.給程式系結埠號
tcp_server_socket.bind(("192.168.3.51", 10000))
# 3.設定監聽
# 128表示最大等待建立連接的個數
# listen后的這個套接字只負責接收客戶端連接請求,不能收發訊息,收發訊息使用回傳的這個新套接字來完成
tcp_server_socket.listen(128)
# 4.等待客戶端建立連接的請求, 只有客戶端和服務端建立連接成功代碼才會解阻塞,代碼才能繼續往下執行
# 專門和客戶端通信的套接字: service_client_socket
# 客戶端的ip地址和埠號: ip_port
service_client_socket, ip_port = tcp_server_socket.accept()
# 代碼執行到此說明連接建立成功
#print ("client connected:", ip_port)
# 5.接收客戶端發送的資料, 這次接收資料的最大位元組數是1024
def rcv(service_client_socket):
while True:
# 4.等待客戶端建立連接的請求, 只有客戶端和服務端建立連接成功代碼才會解阻塞,代碼才能繼續往下執行
# 專門和客戶端通信的套接字: service_client_socket
# 客戶端的ip地址和埠號: ip_port
service_client_socket, ip_port = tcp_server_socket.accept()
print ("client connected:"+str(ip_port)+"\n")
while True:
t = service_client_socket.recv(1024)
msg_length = len(t)
#service_client_socket.send(bytes(t,encoding="utf8"))
print(str(ip_port)+">>"+str(msg_length)+str(t)+"\n")
msg_send = input("reply"+str(ip_port)+":")
service_client_socket.send(bytes(msg_send,encoding="utf8"))
trd0 = threading.Thread(target=rcv,args=(service_client_socket,))
trd1 = threading.Thread(target=rcv,args=(service_client_socket,))
trd2 = threading.Thread(target=rcv,args=(service_client_socket,))
trd3 = threading.Thread(target=rcv,args=(service_client_socket,))
trd4 = threading.Thread(target=rcv,args=(service_client_socket,))
trd5 = threading.Thread(target=rcv,args=(service_client_socket,))
trd6 = threading.Thread(target=rcv,args=(service_client_socket,))
trd7 = threading.Thread(target=rcv,args=(service_client_socket,))
trd0.start()
trd1.start()
trd2.start()
trd3.start()
trd4.start()
trd5.start()
trd6.start()
trd7.start()
'''
while true:
t = input("input message:")
service_client_socket.send(bytes(t,encoding="utf8"))
if t == "exit":
true = False
tcp_server_socket.close()
'''
while True:
pass
'''
while True:
recv_data = service_client_socket.recv(1024)
# 獲取資料的長度
recv_data_length = len(recv_data)
# print("recv data lenght is:", recv_data_length)
# 對二進制資料進行解碼
# recv_content = recv_data.decode("gbk")
# print("接收客戶端的資料為:", recv_content)
print ("client:", recv_data)
# 準備發送的資料
# send_data = "ok".encode("gbk")
send_data = bytes(">>",encoding="utf8") + recv_data + bytes("\n",encoding="utf8")
# 6.發送資料給客戶端
service_client_socket.send(send_data)
# 關閉服務與客戶端的套接字, 終止和客戶端通信的服務
if recv_data == "close":
service_client_socket.close()
# 7.關閉服務端的套接字, 終止和客戶端提供建立連接請求的服務
tcp_server_socket.close()
'''
name = input("input:")
print("you input:",name)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271723.html
標籤:智能硬件
上一篇:EEPROM讀寫資料錯誤
下一篇:KEIL自學碰到了問題
