【问题标题】:Python Socket Programming - ConnectionRefusedError: [WinError 10061]Python 套接字编程 - ConnectionRefusedError: [WinError 10061]
【发布时间】:2018-04-03 20:00:30
【问题描述】:

我正在尝试建立一个简单的 TCP 客户端-服务器连接,但有一个我无法修复的异常。

这是我的服务器

   from socket import *
serverPort = 1200
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind('',serverPort)
print('Server has started: '+str(serverPort))
print('Server is ready to accept requests: ')
while 1:
    connectionSocket, addr = serverSocket.accept();
    print('Klienti u lidh me serverin %s me port $s' % addr)
    fjalia = connectionSocket.recv(1024)
    FjaliaMeShkronjaTeMedha = fjalia.upper()
    print(FjaliaMeShkronjaTeMedha)
    connectionSocket.send(FjaliaMeShkronjaTeMedha)
    connectionSocket.close()

这是我的客户:

import socket
serverName = 'localhost'
serverPort = 1200
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((serverName,serverPort)) #here is the error
var = input("jeni lidhur me serverin, shkruaje kerkesen")
s.sendall(str.encode(var))
data = s.recv(1024)
s.close()
print('te dhenat e pranuara nga serveri',repr(data))

然而,在这个特定片段的客户端,连接被拒绝

 s.connect((serverName,serverPort)) #here is the error

这是一个例外Error

谁能告诉我为什么会这样?我是套接字的新手 提前致谢

【问题讨论】:

  • 你的服务器运行没有错误?
  • @EJP 是的,问题出在客户端

标签: python sockets tcp


【解决方案1】:

代码问题

您的服务器不接受任何连接,这就是您看到此错误的原因。 您的服务器实现有一些问题,让我为您重点介绍一下。 首先 serverSocket.bind('',serverPort) 调用不正确,您应该将其更改为 serverSocket.bind(('',serverPort)) 元组 其次,您的套接字必须处于侦听模式才能侦听绑定连接。

这里是固定代码:

对于服务器

from socket import *
serverPort = 1200
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort))
serverSocket.listen(10)
print('Server has started: '+str(serverPort))
print('Server is ready to accept requests: ')
while 1:
     client_sock, address = serverSocket.accept()
     print('Klienti u lidh me serverin {0} me port $s'.format( address))
     fjalia = client_sock.recv(1024)
     FjaliaMeShkronjaTeMedha = fjalia.upper()
     print(FjaliaMeShkronjaTeMedha)
     client_sock.send(FjaliaMeShkronjaTeMedha)
     client_sock.close()

对于客户端

import socket
serverName = 'localhost'
serverPort = 1200
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((serverName,serverPort)) #here is the error
var = b"jeni lidhur me serverin, shkruaje kerkesen"
s.sendall((var))
data = s.recv(1024)
s.close()
print('te dhenat e pranuara nga serveri',repr(data))

从服务器端输出

Server has started: 1200
Server is ready to accept requests: 
Klienti u lidh me serverin ('127.0.0.1', 54722) me port $s
JENI LIDHUR ME SERVERIN, SHKRUAJE KERKESEN

客户端输出

te dhenat e pranuara nga serveri b'JENI LIDHUR ME SERVERIN, SHKRUAJE KERKESEN'

希望对你有帮助

【讨论】:

  • 服务器端的输出正常,但在客户端错误仍然存​​在,我没有得到输出
  • @BleronQorri 你对客户端有什么期望?这是客户端的打印print('te dhenat e pranuara nga serveri',repr(data)) 从服务器端发送的数据与之前客户端发送的数据相同
  • 我期待你得到同样的东西,但我没有得到它,我不知道为什么,代码是正确的
  • 在 Windows 上使用 ipconfig 或在 Linux 上使用 ifconfig 获取您机器的 ip。然后 。在服务器文件中的代码 serverSocket.bind(('yourIP',serverPort)) 和客户端中的 serverName = 'yourIP' 中进行以下更改。作为记录,您需要先运行服务器并且不要退出服务器,然后在服务器已经运行的情况下运行客户端。
猜你喜欢
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 2021-07-16
相关资源
最近更新 更多