【问题标题】:testing client- server on the same computer在同一台计算机上测试客户端服务器
【发布时间】:2016-08-15 17:16:19
【问题描述】:

我正在尝试使用 python 在我的笔记本电脑上测试套接字通信。但是,我不确定为什么没有建立连接?我不断收到目标机器主动拒绝连接的错误消息。我正在尝试使用同一台计算机来运行客户端和服务器部分。服务器运行良好,但客户端没有连接。我想我的主机名错误(127.0.0.1)但不确定我应该使用什么?我还尝试将服务器主机名更改为 (0.0.0.0) 以及客户端要连接的主机名的 IPV4 地址,但这也不起作用。任何帮助将不胜感激!

我的代码(服务器部分):

import socket

comms_socket =socket.socket()
comms_socket.bind(('127.0.0.1', 50000))
comms_socket.listen(10)
connection, address = comms_socket.accept()

while True:
    print(connection.recv(4096).decode("UTF-8"))
    send_data = input("Reply: ")
    connection.send(bytes(send_data, "UTF-8"))

客户部分:

import socket

comms_socket = socket.socket()
comms_socket.connect(('127.0.0.1',50000))

while True:

    send_data = input("Message: ")
    comms_socket.send(bytes(send_data, "UTF-8"))
    print(comms_socket.recv(4096).decode("UTF-8"))

【问题讨论】:

  • 无法重现您的问题,您的代码在我的机器上运行良好。 (Windows 7,python 3.5)。检查您是否安装了某种形式的防火墙,阻止您的代码打开套接字。另外,你在什么操作系统上运行这个。
  • 这个代码对我来说也很好。顺便说一句,通常的模式是让服务器监听任何地址 (INADDR_ANY),在 python 中,该地址由空字符串 ("") 指示。然后它将通过 localhost 接口 (127.0.0.1) 或任何其他具有 IP 地址的接口接收消息。客户端始终必须在 connect 中提供明确的地址。
  • 我使用的是 windows 10,python 3.5。我认为当我在 python shell 上运行它时,只是 IDLE 给了我这个问题。当我直接运行时,该程序有效。感谢您的帮助

标签: python sockets tcp client communication


【解决方案1】:

您的代码不适用于 python 2.* ,因为 python 3.* 与 python 2.* 中的 input()raw_input()bytes 等存在差异。您必须至少进行以下更改才能使其与 python 2.* 一起使用。否则,使用 python 3 运行您的代码:

服务器程序:

import socket

comms_socket =socket.socket()
comms_socket.bind(('127.0.0.1', 7000))
comms_socket.listen(10)
connection, address = comms_socket.accept()

while True:
    print(connection.recv(4096).decode("UTF-8"))
    send_data = raw_input("Reply: ") # Use raw_input() instead of input()
    connection.send(send_data.encode("UTF-8")) 

客户端程序:

import socket


comms_socket = socket.socket()
comms_socket.connect(('127.0.0.1',7000))

while True:

    send_data = raw_input("Message: ")
    comms_socket.send(send_data.encode("UTF-8"))
    print(comms_socket.recv(4096).decode("UTF-8"))

如果您想在特定用例中按预期使用bytes,则应在python 2.6 或更高版本中使用bytesarray。检查这个:the bytes type in python 2.7 and PEP-358

【讨论】:

  • 我正在使用 python 3,我最初使用 IDLE 中的 python shell 来运行它们,但它不起作用。但是,当我直接运行它们时,它们确实有效。也许是 IDLE 的问题?
猜你喜欢
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 2013-11-26
相关资源
最近更新 更多