text: #!/usr/bin/env python
  # -*- coding: utf-8 -*-
  ######################################################################
  #   Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved.
  #
  # Licensed under the Apache License, Version 2.0 (the "License");
  # you may not use this file except in compliance with the License.
  # You may obtain a copy of the License at
  #
  #     http://www.apache.org/licenses/LICENSE-2.0
  #
  # Unless required by applicable law or agreed to in writing, software
  # distributed under the License is distributed on an "AS IS" BASIS,
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  # See the License for the specific language governing permissions and
  # limitations under the License.
  ######################################################################
  """
  File: conversation_server.py
  """
  
  from __future__ import print_function
  
  import sys
  sys.path.append("../")
  import socket
  from thread import start_new_thread
  from tools.conversation_strategy import load
  from tools.conversation_strategy import predict
  reload(sys)
  sys.setdefaultencoding('utf8')
  
  SERVER_IP = "127.0.0.1"
  SERVER_PORT = 8601
  
  print("starting conversation server ...")
  print("binding socket ...")
  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # Bind socket to local host and port
  try:
      s.bind((SERVER_IP, SERVER_PORT))
  except socket.error as msg:
      print("Bind failed. Error Code : " + str(msg[0]) + " Message " + msg[1])
      exit()
  # Start listening on socket
  s.listen(10)
  print("bind socket success !")
  
  print("loading model...")
  model = load()
  print("load model success !")
  
  print("start conversation server success !")
  
  
  def clientthread(conn, addr):
      """
      client thread
      """
      logstr = "addr:" + addr[0] + "_" + str(addr[1])
      try:
          # Receiving from client
          param = conn.recv(4096).decode()
          logstr += "\tparam:" + param
          if param is not None:
              response = predict(model, param.strip())
              logstr += "\tresponse:" + response
              conn.sendall(response.encode())
          conn.close()
          print(logstr + "\n")
      except Exception as e:
          print(logstr + "\n", e)
  
  
  while True:
      conn, addr = s.accept()
      start_new_thread(clientthread, (conn, addr))
  s.close()
  