Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果这个示例中的TCP服务器';还没关门吗?_Tcp_Groovy_Client - Fatal编程技术网

如果这个示例中的TCP服务器';还没关门吗?

如果这个示例中的TCP服务器';还没关门吗?,tcp,groovy,client,Tcp,Groovy,Client,顺便说一下,这是用Groovy编写的 我已经有一段时间没有弄乱我的TCP服务器脚本了,我决定让它保持打开状态,即使在使用之后也继续侦听,而不是只适合一次使用。但是,当我这样做时,它抛出一个异常,然后无论如何关闭脚本 我的示例脚本如下所示: TCP服务器 def server = new ServerSocket(2000) println("Waiting for connection") server.accept() { socket -> socket.

顺便说一下,这是用Groovy编写的

我已经有一段时间没有弄乱我的TCP服务器脚本了,我决定让它保持打开状态,即使在使用之后也继续侦听,而不是只适合一次使用。但是,当我这样做时,它抛出一个异常,然后无论如何关闭脚本

我的示例脚本如下所示:

TCP服务器

def server = new ServerSocket(2000)

println("Waiting for connection")


    server.accept() { socket ->
        socket.withStreams { input, output ->

        w = new BufferedWriter(new OutputStreamWriter(output))
        String message = "Connection was successful"

            r = new BufferedReader(new InputStreamReader(input))

        while(true) {
        if(message !=null) {
            sendMessage(message)
            message = null
        }

        String a = r.readLine()

        if(a.equals("name"))
            message = "Bob"
        else if(a.equals("date"))
            message = new Date()
        else if(a.equals("ip")) 
            message = InetAddress.getLocalHost().getHostAddress()
        else if(a.equals("quit")) {
            server.close()
            return
        } else 
            message = "$a command unknown"
        }
        }
    }

def sendMessage(String msg) {
    println("Sending: >" + msg + "<")
    w.writeLine(msg)
    w.flush();
}

有人知道保持服务器脚本运行的方法吗?我想我只是过于简单了。

试着将服务器代码修改为:

def server = new ServerSocket(2000)
println("Waiting for connection")

while (true) {
    server.accept() { socket ->
        socket.withStreams { input, output ->
            def w = new BufferedWriter(new OutputStreamWriter(output))
            String message = "Connection was successful"
            def r = new BufferedReader(new InputStreamReader(input))

            while (true) {
                if (message !=null) {
                    sendMessage(message, w)
                    message = null
                }

                String a = r.readLine()
                if (a == null) {
                    socket.close()
                    println "Client disconnected"
                    return
                } else if (a.equals("name")) {
                    message = "Bob"
                } else if (a.equals("date")) {
                    message = new Date()
                } else if (a.equals("ip")) {
                    message = InetAddress.getLocalHost().getHostAddress()
                } else if (a.equals("quit")) {
                    server.close()
                    return
                } else { 
                    message = "$a command unknown"
                }
            }
        }
    }
}

def sendMessage(msg, writer) {
    println("Sending: >" + msg + "<")
    writer.writeLine(msg.toString())
    writer.flush();
}
def server=newserversocket(2000)
println(“等待连接”)
while(true){
server.accept(){socket->
socket.withStreams{输入,输出->
def w=新的BufferedWriter(新的OutputStreamWriter(输出))
String message=“连接成功”
def r=新的BufferedReader(新的InputStreamReader(输入))
while(true){
如果(消息!=null){
发送消息(消息,w)
消息=null
}
字符串a=r.readLine()
如果(a==null){
socket.close()
println“客户端已断开连接”
返回
}如果(a.等于(“名称”)){
message=“Bob”
}如果(a.等于(“日期”)){
消息=新日期()
}否则,如果(a.等于(“ip”)){
message=InetAddress.getLocalHost().getHostAddress()
}否则,如果(a等于(“退出”)){
server.close()
返回
}否则{
message=“$a命令未知”
}
}
}
}
}
def sendMessage(消息,编写器){

println(“发送:>”+msg+”啊,谢谢@Binil-Thomas!你完全正确。我感谢你解释它为什么抛出异常。
def server = new ServerSocket(2000)
println("Waiting for connection")

while (true) {
    server.accept() { socket ->
        socket.withStreams { input, output ->
            def w = new BufferedWriter(new OutputStreamWriter(output))
            String message = "Connection was successful"
            def r = new BufferedReader(new InputStreamReader(input))

            while (true) {
                if (message !=null) {
                    sendMessage(message, w)
                    message = null
                }

                String a = r.readLine()
                if (a == null) {
                    socket.close()
                    println "Client disconnected"
                    return
                } else if (a.equals("name")) {
                    message = "Bob"
                } else if (a.equals("date")) {
                    message = new Date()
                } else if (a.equals("ip")) {
                    message = InetAddress.getLocalHost().getHostAddress()
                } else if (a.equals("quit")) {
                    server.close()
                    return
                } else { 
                    message = "$a command unknown"
                }
            }
        }
    }
}

def sendMessage(msg, writer) {
    println("Sending: >" + msg + "<")
    writer.writeLine(msg.toString())
    writer.flush();
}