我想使用套接字将服务器连接到客户端,但是出现错误(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
感谢阅读,请帮助我!