【问题标题】:Python - error when making a socket connection (server - target)Python - 建立套接字连接时出错(服务器 - 目标)
【发布时间】:2021-08-10 09:27:01
【问题描述】:

(使用 Python 3)我正在尝试连接服务器和客户端并简单地从一个消息发送到另一个消息,但我不知道为什么会收到这个奇怪的错误:OSError: [WinError 10057]。有谁知道为什么会这样?我做了一些研究但没有找到任何东西,我认为我在制作全局变量时出错了,还是消息编码和解码的问题?

这是我的完整错误:

文件“server_side.py”,第 34 行,在 壳()

文件“server_side.py”,第 6 行,在 shell 中 s.send(command.encode('utf-8'))

OSError: [WinError 10057] 不允许发送或接收数据的请求,因为套接字未连接并且(当使用 sendto call) 没有提供地址

这是我的服务器端代码:

import socket

def shell():
    command = input('[+] Insert command: ')
    s.send(command.encode('utf-8')) 
    message = target.recv(1024)
    print(message.decode('utf-8'))

s = ''
target = ''  
ip = ''

def server():

    global s
    global target
    global ip    

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
    s.bind(('192.168.1.109', 54321))#target ip, port more bit isti
    s.listen(5)

    print('[+] Listening for connections')
    target, ip = s.accept()
    print('[+] Connection established from: %s' %str(ip))

server()
shell()

这是我的客户端代码:

import socket

def shell():
    command = sock.recv(1024)
    message = 'Hello there'
    sock.send(message.encode('utf-8'))

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('192.168.1.109', 54321)) #home ip

shell()

sock.close()

我在服务器端示例中的命令输入应该是单词:Hello,或者类似的东西。

【问题讨论】:

  • 您是否考虑过查找 Winsock 错误 10057?

标签: python sockets error-handling serversocket


【解决方案1】:

您必须将shell() 函数置于无限循环中,并且您必须运行服务器端代码,然后运行客户端代码。

这里有一点改动的代码: 服务器端代码:

import socket

def shell():
    command = input('[+] Insert command: ')
    s.send(command.encode('utf-8')) 
    message = target.recv(1024)
    print(message.decode('utf-8'))

s = ''
target = ''  
ip = ''

def server():

    global s
    global target
    global ip    

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
    s.bind(('192.168.1.109', 54321))#target ip, port more bit isti
    s.listen(5)

    print('[+] Listening for connections')
    target, ip = s.accept()
    print('[+] Connection established from: %s' %str(ip))
while True:
   server()
   shell()
s.close()

客户端代码:

import socket

def shell():
    command = sock.recv(1024)
    message = 'Hello there'
    sock.send(message.encode('utf-8'))

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('192.168.1.109', 54321)) #home ip

while True:
    shell()

sock.close()

【讨论】:

  • 他正在调用accept(),即使他没有,客户端也可以连接,在一定程度上,由于 TCP 积压。
  • @user207421 抱歉错过了
  • 我测试了你的代码,它给了我同样的错误
猜你喜欢
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2014-03-01
相关资源
最近更新 更多