(드릴 수 있는게 기프티콘 밖에 없네요,,) 파이썬 입니다.


stop and wiat 센더

from threading import Timer

import random

import time

from socket import *


timeout = 5

clientSocket = socket(AF_INET,SOCK_DGRAM)

seqnum=0 #데이터 순서



count=int(input("몇개 데이터 전송?"))

RTT=(1000**-1)*float(input("RTT?(ms)"))#ms를 초로 변환

i=0

clientSocket.sendto(str(RTT).encode(),("127.0.0.1", 12000))


while i<count:

message="["+str(seqnum)+"]"

#여기~~~~~~~~~~1

clientSocket.sendto(message.encode(),("127.0.0.1", 12000))

ACK, serverAddress = clientSocket.recvfrom(2048)

#여기~~~~~~~~~~2

seqnum+=1

i+=1




그니까 여기~~~~~1에서 타이머를 발동시켜서

여기~~~~~~2에서 타이머를 끄는데

ACK, serverAddress = clientSocket.recvfrom(2048) 이 부분에서 대기상태가 지속되서

타이머가 5초 넘어가면 continue하고 싶은데 어케해야할까요..

파이썬입니다.


별짓 다하고 있고 밑에 분들이 알려주신 방법 찾아가면서 하는데 자꾸 에러나서 ㅠㅠ한번더 올립니다.


작은성의지만 기프티콘이라도 드릴게요


혹시 몰라서 리시버 부분도 올릴게요..


#stop and wiat 리시버

from socket import *

import random

import time

import threading



serverSocket = socket(AF_INET, SOCK_DGRAM)

serverSocket.bind(('127.0.0.1', 12000))


loss=float(input("loss 확률:(0~1사이 값)"))

print ("리시버 준비 완료")

ACK="1"


RTT, clientAddress = serverSocket.recvfrom(2048)

RTT=float(RTT.decode())


while True:

    message, clientAddress = serverSocket.recvfrom(2048)

    if random.uniform(0,1)<loss:#data loss

        continue

    else:#data loss 없음

    print(message.decode())#도착

    if random.uniform(0,1)<loss:#ack 전송 오류

        continue

    else:

        serverSocket.sendto(ACK.encode(),clientAddress)#ACK전송