ConnectionRefusedError: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。

Python
本ページはプロモーションが含まれています

はじめに

robtframework上からpythonのソースコードを呼び出しソケット通信を行っている際にエラーが発生しました。
今回はその時の原因と対処方法についてのメモです。

ソースコード&エラー

ソケットのサーバ側はフリーのアプリを利用していました。
robotframeworkとpythonのソースコードは次の通りです。

*** Settings ***
Library    socket_test.py

*** Variables ***
${IP_ADD}    127\.0\.0\.1

*** Keywords ***

*** Test Cases ***
Test
    ${return_wd}= py_socket    ${IP_ADD}    5000
    Log To Console    ${\n}${return_wd}

robotframeworkを実行してpythonのソケットを呼び出しています。

import socket
from robot.api import logger

def py_socket(ip_addr, port_num):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    param = (ip_addr, int(port_num))
    s.connect(param)
    print(ip_addr, 'Port:',  str(port_num), 'へ接続中')
    logger.console(ip_addr, 'Port:',  str(port_num), 'へ接続中')


    s.send(b'test')
    result = int(s.recv(256).decode().rstrip('\n'))
    
    return result

これを実行すると

PS C:\Users\****\Desktop\robotframework\socket> robot .\socket_test.robot
==============================================================================
Socket Test
==============================================================================
Test | FAIL |
ConnectionRefusedError: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。
------------------------------------------------------------------------------
Socket Test | FAIL |
1 test, 0 passed, 1 failed
==============================================================================

エラーメッセージ

「ConnectionRefusedError: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。」

が表示されました。

原因と対処方法

原因は指定したポート番号でした。
ポート番号によっては既に利用されているものがあり、今回はそれに該当した(ようです)

ポートが合いているかを確認するには、
Windowsの場合、コマンドかコントロールパネル(ファイヤーウォール)から確認出来ます。

コマンドの場合は、プロンプトを開いて

netstat -an

を実行。

コントロールパネルの場合、スタート下の検索ボックスで「コントロールパネル」と入力。
コントロールパネルを開いた後に「システムとセキュリティ」→「Windows Defender ファイヤーウォール」を選びます。
左にある「詳細設定」をクリックするとWindows Defenderの詳細が表示されます。

そこで受信、送信のそれぞれの利用状況が確認出来ます。

また、ポート番号に指定がない場合は誰でも任意に使用できる「49152〜65535」を使うのが良いかと思います。

さいごに

今回はポート番号による通信が出来ない問題でした。
通信に詳しくない場合ポート番号が悪さをしている等わからない(最初は僕もさっぱりでした)ので、起こりうるエラーかと思います。

この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。

タイトルとURLをコピーしました