Python UDP Сервер / Клиент - PullRequest
1 голос
/ 10 марта 2020

Я пытаюсь создать простой UDP-сервер и клиент, который будет просто обмениваться строковыми подтверждениями их соединения. Тем не менее, моя клиентская программа не выполняет передачу данных, хотя кажется, что она подключена.

Вот код для моего сервера, я вполне уверен, что этот код в порядке, так как я смог заставить кого-то еще подключить их клиент UDP, и выполнение было в порядке.

#!/usr/bin/env python

################ UDP SERVER ################################

import socket
import threading
import sys


ip = sys.argv[1] # this is local host
port = int(sys.argv[2])    # we'll start here.

sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM)

done = False
while not done:
   try:                                       # servers must bind an ip address and a port to work
     sock.bind((ip, port))
     done = True
     print("Listening on Port: " + str(port))
   except:
     print("Cannot connect to Port: " + str(port))
     port += 1 

def handel( a_socket):
  request = a_socket.recv(1024)
  print(str(request))
  a_socket.send("Thank you sir!")              # the acknowledgement 
  a_socket.close()                             # close the socket so it is NOT locked up.

while True:  
  message,addr = sock.recvfrom(2500) # OK someone pinged me.
  print( "received from "+str(addr)+': '+str(message) )
  sock.sendto("Thank you!",addr)
  sock.close()
  sys.exit()
  break

И вот моя глючная клиентская программа UDP

#!/usr/bin/env python

##################### UDP CLIENT #############################

import socket
import ssl
import sys

if len(sys.argv) < 3:
   print "USAGE program IP port "
   sys.exit()

try:
  ip = sys.argv[1]
  port = int(sys.argv[2])
except:
   print "USAGE program IP port "
   sys.exit()

def listen(ip, port):
  sox = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  try:
    sox.connect((ip, port))
    print("UDP server listening on Port: " +str(port))
    data, addr = sox.recvfrom(1024)
    print("Received: ", data, addr)
    sox.sendto("Thank you!", addr)
    sox.close()
  except:
    print("UDP server not listening on Port: " + str(port))
    sys.exit()

listen(ip, port)

, написанная в Python 2.7, принимает два ввода в командной строке для IP-адреса и номера порта. Дайте мне знать, что вы думаете, спасибо за ваше время!

...