【问题标题】:python socket server with arguments带参数的python套接字服务器
【发布时间】:2018-02-17 02:21:55
【问题描述】:

你好,所以我正在制作一个 python 套接字服务器和客户端,我试图弄清楚如何制作它,所以当服务器使用参数向客户端发送消息时(我不善于解释自己)但基本上是我的问题是这样的

服务器控制台:

Command: >senddata 127.0.0.1 32

客户响应:

Command Accepted!
Traceback (most recent call last):
  File "C:\Users\Goten\Desktop\client\client.py", line 18, in <module>
    ip = sys.argv[1]
IndexError: list index out of range

我正在向 127.0.0.1 发送 32 个字节的数据(我认为),但它不起作用

这是我的客户代码:

import socket
import sys

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

host = "127.0.0.1"
port = 8888

socket.connect((host, port))

while True:
    msg = socket.recv(1024)

    if ">senddata".lower() in msg:
        print("Command Accepted!")
        ip = sys.argv[1]
        datasize = sys.argv[2]

        data = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

        port = 80
        data.sendto(datasize, (ip, port))
        print("Sent")

我真的不知道我做错了什么

【问题讨论】:

  • sys.argv 是启动应用程序时使用的命令参数列表。看起来您想要做的是从通过您的套接字发送的消息中获取 ip 和数据大小? sys.argv 不会帮你解决这个问题。
  • mateo 那我该怎么办
  • 您是否希望 ip 和数据大小在 msg 中?如果是,那么您可以将味精分开。与docs.python.org/3/library/stdtypes.html#bytes.split

标签: python sockets


【解决方案1】:

您正在阅读 msg,而不是 sys.argv。

    if ">senddata".lower() in msg:
        print("Command Accepted!")
        ip = msg.split(" ")[1]
        datasize = msg.split(" ")[2]

【讨论】:

  • 我想要做的是让我的服务器告诉客户端做类似的事情,尽管我不想直接对客户端做这件事
  • 这是关于错误“IndexError: list index out of range”
  • 顺便说一句,我不使用 linux 我正在使用 windows 和 >senddata 是我在服务器中输入的命令让客户端接收
  • 啊,好的,现在我明白了。你解释得不好嘿嘿。我将编辑我的帖子
  • 试试看,你读的是 msg,不是 sys.argv 呵呵。我虽然你是从命令行运行的,呵呵
猜你喜欢
  • 2011-04-21
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 2019-07-17
  • 2018-04-21
相关资源
最近更新 更多