Добавление моей собственной версии, просто чтобы показать некоторые трюки itertools v2.7:
import itertools
def Primes():
primes = []
a = 2
while True:
if all(itertools.imap(lambda p : a % p, primes)):
yield a
primes.append(a)
a += 1
# Print the first 100 primes
for _, p in itertools.izip(xrange(100), Primes()):
print p
Да, это возможно. Ваша проблема в том, что у вас есть целевой адрес: неправильный порт при отправке дейтаграммы ACK. Вы должны получить целевой адрес: порт из принятого DatagramPacket или просто еще повторное использование , что датаграмма с разными данными в качестве дейтаграммы ACK.
Как сервер может отправлять клиенту с помощью собственного порта? Вы отправляете ACK с сервера на клиентский порт сервера, вы должны получить UDP-порт клиента из полученного пакета и отправить данные на этот порт.
EDIT
Изменить сервер в методе SendACK на :
ackPacket = new DatagramPacket(ackArray, ackArray.length, InetAddress.getByName("localhost"), incomingPacket.getPort());
И теперь проанализируйте код, запустив.