UDP TypeError:不支持+:“NoneType”和“str”的操作数类型

2024-04-20 01:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python和计算机网络完全是新手。在进行Uni项目时,我遇到了一个问题。我做错什么了?任何帮助我都将不胜感激。你知道吗

这里是服务器端:

import socket

def Main():
    host = "127.0.0.1"
    port = 5000

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host, port))

    print ("Server Started.")
    while True:
        data, addr = s.recvfrom(1024)
        print ("message from: ") + str(addr)
        print ("from connected user: ") + str(data.decode('utf-8'))
        data = str(data).upper()
        print ("sending: ") + str(data)
        s.sendto(data, addr)

    s.close()

if __name__ == '__main__':
    Main()

这是我的客户方:

import socket

def Main():
    host = "127.0.0.1"
    port = 5000

    server = ('127.0.0.1', 5000)

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host, port))

    message = input('->')
    while message != 'q':
        s.sendto(message.encode('utf-8'), server)
        data, addr = s.recvfrom(1024)
        print ('Received from server: ') + str(data)
        message = input('->')
    s.close()

if __name__ == '__main__' : 
    Main()

Tags: fromimporthostmessagedataservermainport
1条回答
网友
1楼 · 发布于 2024-04-20 01:16:41

有几个问题;主要是印刷问题。你知道吗

您有几个print('some text') + str(data)的实例;这是行不通的,因为当print()输出到屏幕(STDOUT)时,它返回None,所以您实际做的是连接None + str(data)

你需要的是print('some text' + str(data))。你知道吗

此外,在服务器端,您将从客户端接收到的数据回显到客户端时出现了as问题—需要将其重新编码为bytearray(它以bytearray的形式出现,转换为utf-8字符串进行显示,需要在回复之前返回bytearray)。你知道吗

总之,服务器:

import socket


def Main():
    host = "127.0.0.1"
    port = 5000

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host, port))

    print("Server Started.")
    while True:
        try:
            data, addr = s.recvfrom(1024)
            print("message from: " + str(addr))  # moved string concatenation inside print method
            print("from connected user: " + str(data.decode('utf-8')))  # moved string concatenation inside print method
            data = str(data).upper()
            print("sending: " + str(data))  # moved string concatenation inside print method
            s.sendto(data.encode('utf-8'), addr)  # needed to re-encode data into bytearray before sending
        except KeyboardInterrupt:  # added for clean CTRL + C exiting
            print('Quitting')
            break

    s.close()


if __name__ == '__main__':
    Main()

以及客户:

import socket


def Main():
    host = "127.0.0.1"
    port = 5001

    server = ('127.0.0.1', 5000)

    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind((host, port))

    message = input('->')
    while message != 'q':
        try:
            s.sendto(message.encode('utf-8'), server)
            data, addr = s.recvfrom(1024)
            print('Received from server: ' + str(data))  # moved string concatenation inside print method
            message = input('->')
        except KeyboardInterrupt:  # added for clean CTRL + C exiting
            print('Quitting')
            break

    s.close()


if __name__ == '__main__':
    Main()

相关问题 更多 >