ConnectionRefusedError:[WinError 10061]-python问题

时间:2020-11-11 08:28:44

标签: python

我想使用套接字将服务器连接到客户端,但是出现错误(ConnectionRefusedError)。

我不知道为什么服务器和客户端的端口号匹配时会发生错误。

这是IDE(Visual Studio代码)的配置问题吗?还是IDLE.exe?

这是代码bot.py(服务器)

import threading
import json

from chatbot.config.DatabaseConfig import *
from chatbot.utils.Database import Database
from chatbot.utils.BotServer import BotServer
from chatbot.utils.Preprocess import Preprocess
from chatbot.models.intent.IntentModel import IntentModel
from chatbot.models.ner.NerModel import NerModel
from chatbot.utils.FindAnswer import FindAnswer


p=Preprocess(word2index_dic='chatbot_dict.bin',
 userdic='user_dic.txt')

 
intent = IntentModel(model_name='intent_model.h5', proprocess=p)


ner = NerModel(model_name='ner_model.h5', proprocess=p)

def to_client(conn, addr, params):
    db = params['db']

    try:
        db.connect()  

        
        read = conn.recv(2048)  
        print('===========================')
        print('Connection from: %s' % str(addr))

        if read is None or not read:
            
            print('클라이언트 연결 끊어짐')
            exit(0)


       
        recv_json_data = json.loads(read.decode())
        print("데이터 수신 : ", recv_json_data)
        query = recv_json_data['Query']

       
        intent_predict = intent.predict_class(query)
        intent_name = intent.labels[intent_predict]

        
        ner_predicts = ner.predict(query)
        ner_tags = ner.predict_tags(query)


       
        try:
            f = FindAnswer(db)
            answer_text, answer_image = f.search(intent_name, ner_tags)
            answer = f.tag_to_word(ner_predicts, answer_text)

        except:
            answer = "죄송해요 무슨 말인지 모르겠어요. 조금 더 공부 할게요."
            answer_image = None

        send_json_data_str = {
            "Query" : query,
            "Answer": answer,
            "AnswerImageUrl" : answer_image,
            "Intent": intent_name,
            "NER": str(ner_predicts)
        }
        message = json.dumps(send_json_data_str)
        conn.send(message.encode())

    except Exception as ex:
        print(ex)

    finally:
        if db is not None: 
            db.close()
        conn.close()


if __name__ == '__main__':

    
    db = Database(
        host=DB_HOST, user=DB_USER, password=DB_PASSWORD, db_name=DB_NAME
    )
    print("DB 접속")

    port = 5050  # ***port***
    listen = 100

    # 봇 서버 동작
    bot = BotServer(port, listen)
    bot.create_sock()
    print("bot start")
    
    while True:
        conn, addr = bot.ready_for_client()
        params = {
            "db": db
        }

        client = threading.Thread(target=to_client, args=(
            conn,
            addr,
            params
        ))
        client.start()

和chatbot_client_test.py(客户端)

import socket
import json


host = "127.0.0.1"  # host
port = 5050  # port 


while True:
    print("질문 : ")
    query = input()  
    if(query == "exit"):
        exit(0)
    print("-" * 40)

    
    mySocket = socket.socket()
    mySocket.connect((host, port))

    
    json_data = {
        'Query': query,
        'BotType': "MyService"
    }
    message = json.dumps(json_data)
    mySocket.send(message.encode())

    
    data = mySocket.recv(2048).decode()
    ret_data = json.loads(data)
    print("답변 : ")
    print(ret_data['Answer'])
    print(ret_data)
    print(type(ret_data))
    print("\n")


mySocket.close()

最后一个BotServer.py(模块)

import socket

class BotServer:
    def __init__(self, srv_port, listen_num):
        self.port = srv_port
        self.listen = listen_num
        self.mySock = None

    
    def create_sock(self):
        self.mySock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.mySock.bind(("0.0.0.0", int(self.port)))
        self.mySock.listen(int(self.listen))
        return self.mySock

   
    def ready_for_client(self):
        return self.mySock.accept()

    
    def get_sock(self):
        return self.mySock

感谢阅读,请帮助我!

0 个答案:

没有答案