繁体   English   中英

为UDP连接创建日志

[英]Creating a log for UDP connection

我的一个大学项目遇到了问题。 我们现在正在做套接字和UDP。 无论如何,因此我们必须制作一个非常简单的程序,服务器,客户端,密码名称验证。 他希望我们做一个事情的日志,然后我创建了一个模块,该模块具有可写入日志文件的方法,这很好用。 我从不同的地方调用过它,它始终有效。 唯一不起作用的时间是从服务器调用时。

import datetime

###Appends the message to the server log with the current date and time
def AddToLogServer(message):
    f = open('Log_Server', 'a')

    time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    f.write(time +" " + message +"\n")
    f.close()

###Appends the message to the client log with the current date and time
def AddToLogClient(message):
    f = open('Log_Client', 'a')

    time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    f.write(time +" " + message +"\n")
    f.close()

这是日志的创建。 工作正常。

import socket
import sys
import Passwords
import getpass
import Log
###Create a connectionless network socket.
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
###Maximum size data.
MAX = 65535
PORT = 1060

if sys.argv[1:] == ['server']:
    ###Set server ip
    ip = '127.0.0.1'
    try:
        s.bind((ip, PORT))
    except:
        ###If the server fails to start this error message and the server should end.
        print "There is an error, perhaps the ip is already being used."
        s.close()
        sys.exit(1)
    ###Add to the server log that the server has started.
    Log.AddToLogServer("The server is up with the ip " + ip)
    print 'Server is up and listening at', s.getsockname()
    ###Listen for a client to send data to the server.
    while True:
        data, address = s.recvfrom(MAX)
        Passwords.getPasswordsAndUsers()
        ###Compare the name inputted to the ones in the user list
        i = Passwords.findUser(data)
        ###Update client log
        Log.AddToLogServer(address[0] +  " Inputted the name " + data)
        s.sendto(str(i), address)
        data, address = s.recvfrom(MAX)
        t = Passwords.checkPassword(data,i)
        ###if the password matched the user print out the correct message and send a message to the client
        if t == 1:
            Log.AddToLogServer(address[0] +  " Inputted the correct password for that user")
            print address[0] + " Has successfully entered the correct User and Password"
            s.sendto("The name and password were correct", address)
        ###if the password did not match the user print out the correct message and send a message to the client
        else:
            Log.AddToLogServer(address[0] +  " Inputted an incorrect password for that user")
            print address[0] + " Has failed to provide the correct Password for the inputted User"
            s.sendto("The password did not match the name", address)


elif sys.argv[1:] == ['client']:
    ###Takes in the ip and name as inputs.
    serverIp = raw_input("Please enter the server ip : ");
    username = raw_input("Enter your first name please: ");
    ### Attempts to send to the server with the given ip
    try:
        s.sendto(username, (serverIp, PORT))
    except:
        ###If the send fails then an error is shown and it finishes the execution.
        print "There was a problem sending to the server"
        s.close()
        sys.exit(1)
    ###Attempt to relieve data from the server, if the client does not then write the appropriate message.
    try:
        data, address = s.recvfrom(MAX)
    except:
        print "There was a problem receiving from the server"

        s.close()
        sys.exit(1)
    data = int(data)
    ###If the data was -1, then the user did not exist and an error should be displayed. Otherwise ask for the
    ###Password and send it to the server.
    if data != -1:
        password = getpass.getpass("Enter your password please: ");
        try:
            s.sendto(password, ('127.0.0.1', PORT))
        except:
            print "There was a problem sending to the server"
            s.close()
            sys.exit(1)
    else:
        print "This first name was not recognised."
        sys.exit(1)
    ###Again try to relieve data from the server and print out the output.
    try:
        data, address = s.recvfrom(MAX)
        print data
        s.close()

    except:
         print "There was a problem receiving to the server"
         s.close()
         sys.exit(1)

客户端服务器代码,启动后从服务器调用该日志将不起作用。

我尝试重现该问题,但是服务器脚本没有执行。 在我的计算机上, sys.argv[1:]返回了[] ,因此, if sys.argv[1:] == ['server']:if sys.argv[1:] == []:请查看我得到的答复。 您应该研究该部分。 if sys.argv[1:] == ['server']:

The server is up with the ip 127.0.0.1
Server is up and listening at ('127.0.0.1', 1060)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM