簡體   English   中英

接受主機/端口的輸入,否則連接默認主機/端口

[英]Taking input for HOST/PORT else connect with default HOST/PORT

我正在嘗試讓query()詢問主機名和端口,嘗試並嘗試如果未成功則嘗試連接到默認主機/端口(localhost / 21567)。

from socket import *
import re

HOST = 'localhost'  # server IP
PORT = 21567        # port
BUFSIZ = 1024
ADDR = (HOST, PORT)
ip = re.compile(r'([0-9\.]{1,3}){4}')

def query():
    while True:
    hostc = raw_input('Host: ')
    portc = int(input('Port: '))
    if (portc != None & bool(re.match(ip, hostc))):
        try:
            tcpCliSock.connect(hostc, portc)
            break
        except:
            pass
        print("\nInvalid Entry.\n")
    else:
        tcpCliSock.connect(ADDR)
        break

tcpCliSock = socket(AF_INET, SOCK_STREAM)   # allocate client's socket
query()

這是我什么都不輸入的結果:

Traceback (most recent call last):
  File "./tcpclient.py", line 30, in <module>
    query()
  File "./tcpclient.py", line 17, in query
    portc = int(input('Port: '))
  File "<string>", line 0

    ^
SyntaxError: unexpected EOF while parsing

如果我輸入有效的主機/端口(有一個服務器在此地址中等待):

Host: 192.168.1.103
Port: 21567

Invalid Entry.

Host: 

我試圖這樣做,以便如果沒有輸入任何值,則轉到外部以連接到默認的HOST / PORT,否則,如果輸入的值有效,則它將連接到hostc / portc。

感謝您的時間。

我同意Sphere的觀點,即您的問題所使用的代碼段並非完全是pythonic,並且肯定有更好的方法來完成您想完成的工作。 但是,話雖如此,僅將您的代碼片段-我已對其進行了修改,以盡可能建立套接字連接。 讓我知道事情的后續:

#!/usr/bin/python

from socket import *
#import re

HOST = 'localhost'  # server IP
PORT = 21567        # port
BUFSIZ = 1024
ADDR = (HOST, PORT)
#ip = re.compile(r'([0-9\.]{1,3}){4}')


def validate_ip(ip):
    try:
        if inet_aton(ip):
           return True
    except:
        return False

def query():
    while True:
        hostc = raw_input('Host: ')
        portc = raw_input('Port: ')
        if (portc and validate_ip(hostc)):
            try:
                tcpCliSock.connect(hostc, int(portc))
                break
            except:
                pass
            #print("\nInvalid Entry.\n")
        else:
            tcpCliSock.connect(ADDR)
            break

tcpCliSock = socket(AF_INET, SOCK_STREAM)   # allocate client's socket
query()

您的代碼中有一些不太“ pythonic”的東西,但是對於您的問題,我會做類似的事情: hostc = raw_input('Host: ') or HOST

這是對我自己的問題的更好的答案,希望是更多的“ pythony”,感謝sphere和ssheth提出可以做得更好的建議:

parser = argparse.ArgumentParser()
parser.add_argument("--host", type=str, default='localhost',
                    help="Host other than %(default)s.")
parser.add_argument("--port", type=int, default=21567, 
                    help="Port other than %(default)s.")
args = parser.parse_args()

HOST = args.host
PORT = args.port

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM