Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过TCP套接字发送消息_Python_Sockets_Udp - Fatal编程技术网

Python 通过TCP套接字发送消息

Python 通过TCP套接字发送消息,python,sockets,udp,Python,Sockets,Udp,我正在制作一个代码,服务器将从1到256KB发送到客户端。客户端接收消息,必须将其返回到服务器。该过程必须重复1000次。消息是从文件中读取的。服务器正在发送,客户端正在接收并发送回,但在某个时刻它停止了。我想知道我的代码出了什么问题 服务器: import socket hostA = '127.0.0.1' portA = 50031 udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udp.bind((hostA, portA

我正在制作一个代码,服务器将从1到256KB发送到客户端。客户端接收消息,必须将其返回到服务器。该过程必须重复1000次。消息是从文件中读取的。服务器正在发送,客户端正在接收并发送回,但在某个时刻它停止了。我想知道我的代码出了什么问题

服务器:

import socket

hostA = '127.0.0.1'
portA = 50031

udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.bind((hostA, portA))
dest = ('127.0.0.1',50008)

arquivo = 'texto.txt'
arq =  open(arquivo , 'r')
arq = arq.read()

for i in range(0, 9):
dado = arq[0:(1024 * (2**i))]

     for j in range(0, 1000):
        for k in range(0, (len(dado) / 1024)):
            x = dado[k:k+1024]
            udp.sendto(x, dest)

        for k in range(0, (len(dado) / 1024)):
            msg, cliente = udp.recvfrom(1024)

udp.close()
客户:

import socket

hostB = '127.0.0.1'
portB = 50008

udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.bind((hostB, portB))
orig = ('127.0.0.1',50031)

dado = ""
for i in range(0, 9):
    for j in range(0, 1000):
        for l in range(0, ((1024 * (2**i))/1024)):
            msg, cliente = udp.recvfrom(1024)
            dado += msg

        for k in range(0, ((1024 * (2**i))/1024)):
            x = dado[k:k+1024]
            udp.sendto(x, orig)

udp.close() 

您的问题询问TCP套接字,但您没有使用TCP

udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.bind((hostA, portA))
您正在使用UDP。与TCP不同,UDP不会检测丢失的数据包或重新传输或重新排序数据

您的协议不能容忍数据包丢失。如果从服务器到客户机或从客户机到服务器的单个数据包丢失,每一方将永远等待另一方

你还有其他问题。想象一下,如果服务器以错误的顺序接收到客户端发送的两个数据报。数据将被破坏


如果您想在UDP而不是TCP的基础上进行设计,您必须实现TCP提供的所有您需要的功能。如果需要丢失数据报检测和重新传输,则需要自己实现或使用TCP。传输速度调整、处理无序接收等也一样。

您能告诉我们您在代码中看到的具体错误或问题吗?