带参数的python套接字服务器

时间:2018-02-16 17:49:25

标签: python sockets

您好我正在创建一个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

我将32字节的数据(我认为)发送到127.0.0.1并且它无法正常工作

这是我的客户代码:

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")

我真的无法弄清楚我做错了什么

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

服务器以连续字符串字节的形式发送整个消息,而不是以谨慎的数组形式发送。为了获得ip地址和数据大小,你必须解析msg字符串字节。