首页 > 解决方案 > 无法建立连接,因为目标机器主动拒绝它 - 我如何检查我的服务器是否正在运行并且客户端是否能够连接

问题描述

我试图在本地主机上运行服务器和客户端,但错误不断弹出 sql 部分没关系我想将元组从客户端发送到服务器然后意识到服务器没有真正工作我如何运行服务器和客户端在同一机器一次,以及不断弹出服务器代码的问题是什么:

import socket
import psycopg2 as sq

conn= sq.connect(database="metro", user = "postgres", password = "12345678",host="localhost", port="5432")
cur = conn.cursor()
try:
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print("Socket creation successful")
except:
    print("Socket creation Failed")

port=8050
s.bind(('localhost',port))
print("Socket is binded to", port)
s.listen(10)
print("Socket is listening")

while True:
    c, addr = s.accept()
    print("got connection from", addr)
    var=c.recv(2056).decode()           #Ticket data from CLIENT

    cur.execute("SELECT * from ticket") #Read DATABASE
    rows = cur.fetchall()
    flag=0
    for row in rows:                    #Check DATABASE FOR VERIFICATION
        if row==var:
            flag=1

    if flag==1:
        data= 'Gate opened'.encode()
    else:
        data= 'Ticket Not Found'.encode()

    c.send(data)
    c.shutdown(SHUT_WR)
    s.shutdown(SHUT_WR)

客户代码:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #define obj

port = 8050 #port no.
s.connect(('192.168.0.120', port))   #connect to server
data=('1','101','123')
for dat in data:
    print(dat)
    s.send(dat.encode())

vari = s.recv(2056)
print(vari.decode())
s.close()

Traceback(最近一次调用最后一次):文件“C:\Users\welcome\Desktop\Python\Metro\Client.py”,第 5 行,在 s.connect(('192.168.0.120', port)) #connect to server ConnectionRefusedError: [WinError 10061] 无法建立连接,因为目标机器主动拒绝它[2.074s 完成]

标签: pythonsocketsnetworking

解决方案


我注意到您的代码中有一些错误。

您可以在客户端尝试“localhost”或“127.0.0.1”与服务器连接
SHUT_WR应该替换为您应该用块socket.SHUT_WR
包围网络操作 并且服务器和客户端中存在逻辑上未对齐的while循环。try except

我已经减轻了这些错误。你可以参考下面的代码。
我只是用虚拟数据测试了这个,而不是数据库连接。

服务器.py

import socket
import psycopg2 as sq
try:
    conn= sq.connect(database="metro", user = "postgres", password = "12345678",host="localhost", port="5432")
    cur = conn.cursor()
    try:
        s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        print("Socket creation successful")
    except:
        print("Socket creation Failed")

    port=8050
    s.bind(('localhost',port))
    print("Socket is binded to", port)
    s.listen(10)
    print("Socket is listening")

    while True:
        c, addr = s.accept()
        print("got connection from", addr)
        var=c.recv(2056).decode()           #Ticket data from CLIENT
        while var:
            cur.execute("SELECT * from ticket") #Read DATABASE
            rows = cur.fetchall()
            flag=0
            for row in rows:                    #Check DATABASE FOR VERIFICATION
                if row==var:
                    flag=1

            if flag==1:
                data= 'Gate opened'.encode()
            else:
                data= 'Ticket Not Found'.encode()
            c.send(data)
            var=c.recv(2056).decode()
        c.close()
except Exception as e:
    print(e)
finally:
    s.close()

客户端.py

import socket
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #define obj
    port = 8050 #port no.
    s.connect(('127.0.0.1', port))   #connect to server
    data=('1','101','123')
    for dat in data:
        print(dat)
        s.send(dat.encode())
        vari = s.recv(2056)
        print(vari.decode())
except Exception as e:
    print(e)
finally:
    s.close()

推荐阅读