You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python socket调用sendto报TypeError: an integer is required错误如何解决

错误产生原因
  • input() 函数返回的所有用户输入默认都是字符串类型,你代码中定义的port变量实际保存的是字符串格式的端口值
  • socket.sendto() 方法要求传入的地址元组里,第二个端口参数必须为整数类型,传入字符串类型的端口就触发了本次类型错误
修复方案

只需要将端口的输入结果转换为整数类型即可,修改后的可运行代码如下:

import socket
import time

target = input("[+] Target ip:  ")
# 将输入的端口字符串转为整数
port = int(input("[+] Port:  "))
print("[+] Sending package to:   > " + target, "<")
time.sleep(1)

byte_message = bytes("Test", "utf-8")
opened_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
opened_socket.sendto(byte_message, (target, port))

如果需要处理用户输入非数字端口的异常情况,可以增加异常捕获逻辑:

import socket
import time

target = input("[+] Target ip:  ")
# 增加端口合法性校验
while True:
    port_str = input("[+] Port:  ")
    try:
        port = int(port_str)
        # 额外校验端口范围是合法的1-65535
        if 1 <= port <= 65535:
            break
        else:
            print("[-] 端口必须在1-65535范围内,请重新输入")
    except ValueError:
        print("[-] 端口必须为数字,请重新输入")

print("[+] Sending package to:   > " + target, "<")
time.sleep(1)

byte_message = bytes("Test", "utf-8")
opened_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
opened_socket.sendto(byte_message, (target, port))

内容的提问来源于stack exchange,提问作者Titz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:18:01