五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

python socket多線程實現(xiàn)客戶端與服務(wù)器連接

發(fā)布日期:2022-01-26 15:30 | 文章來源:站長之家

python socket多線程實現(xiàn)客戶端與服務(wù)器連接,供大家參考,具體內(nèi)容如下

之前因為一些作業(yè)需要完成一個服務(wù)器監(jiān)聽多個客戶端的程序,于是就用python寫了這樣的程序。話不多說,直接上代碼。

server代碼:

import json
import socket
import threading
import time
import struct
class Server():
 def __init__(self):
  self.g_conn_pool = {}  # 連接池
  # 記錄客戶端數(shù)量
  self.num =0
  # 服務(wù)器本地地址
  self.address = ('0.0.0.0', 8000)
  # 初始化服務(wù)器
  self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  self.server_socket.bind(self.address)
  self.server_socket.listen(128)
 def accept_client(self):
  """
接收新連接
"""
  while True:
client_socket, info = self.server_socket.accept()  # 阻塞,等待客戶端連接
print(client_socket,port)
# 給每個客戶端創(chuàng)建一個獨立的線程進行管理
thread = threading.Thread(target=self.recv_msg, args=(client_socket,info))
thread.setDaemon(True)
thread.start()
 def recv_msg(self,client,info):
  # 提示服務(wù)器開啟成功
  print('服務(wù)器已準備就緒!')
  client.sendall("connect server successfully!".encode(encoding='utf8'))
  # 持續(xù)接受客戶端連接
  while True:
try:
 client.sendall(b'Success')
 while True:
  msg = client.recv(1024)
  msg_recv = msg.decode('utf-8')
  if not msg_recv:continue
  else:recv_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())print('客戶端 ' + recv_time + ':\n')print(' ' + msg_recv + '\n')
except Exception as e:
 print('客戶端斷開連接...')
 exit(-1)
 break
 def start_new_thread(self):
  """啟動新線程來接收信息"""
  thread = threading.Thread(target=self.accept_client, args=())
  thread.setDaemon(True)
  thread.start()

server服務(wù)器類,主要是監(jiān)聽以及接收客戶端的信息。

#實例化一個Flask節(jié)點
app = Flask(__name__)

@app.route('/')
def hello():
 return 'hello'

if __name__ == '__main__':
 #創(chuàng)建解析器
 from argparse import ArgumentParser
 parser = ArgumentParser()
 parser.add_argument('-p', '--port', default=5030, type=int, help='port to listen on')
 args = parser.parse_args()
 #獲取端口號
 port = args.port
 #實例化一個server類 并啟動
 py_server = Server()
 py_server.start_new_thread()
 #啟動Flask節(jié)點
 app.run(host='127.0.0.1',port=port)

Client代碼

class Client():
 def __init__(self):
  #服務(wù)器ip與端口
  self.server_address = ('127.0.0.1', 8000)
  
  self.num = 0
 def recv_msg(self):
  print("正在連接服務(wù)器....")
  # 客戶端連接服務(wù)器
  while True:
try:
 self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 #連接服務(wù)器
 self.client_socket.connect(self.server_address)
 num = self.num
 # 制作報頭
 header_dic = {
  'filename': num
 }
 header_bytes = json.dumps(header_dic).encode('utf-8')
 self.client_socket.send(struct.pack('i', len(header_bytes)))
 self.client_socket.send(header_bytes)
 
 #接收信息
 while True:
  msg_recv = self.client_socket.recv(1024).decode('gbk')
  print(msg_recv)
  if msg_recv == 'Success':print('客戶端已與服務(wù)器成功建立連接...')
  elif not msg_recv:continue
  else:recv_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())print( '服務(wù)器 ' + recv_time + ':\n')print(' ' + msg_recv + '\n')
except:
 print('與服務(wù)器斷開連接...')
 break
 def start_new_thread(self):
  """啟動新線程來接收信息"""
  thread = threading.Thread(target=self.recv_msg, args=())
  thread.setDaemon(True)
  thread.start()
  
def main():
 wf = Client()
 wf.start_new_thread()
 while True:
  a = input()
  wf.client_socket.send(a.encode('utf-8'))
if __name__ == '__main__':
 main()

以上為客戶端程序的代碼。

下面是運行的結(jié)果:

服務(wù)器端:

多個客戶端:

代碼實現(xiàn)還是蠻容易的,具體可以自行修改使用。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持本站。

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部