0
這是我還沒有在一段時間與我的TCP服務器腳本混亂和決定,我希望它繼續開放,並繼續使用它即使不是隻有好的傾聽的方式爲什麼此示例TCP Server在未關閉時會拋出異常?
Groovy寫一次使用。但是,當我這樣做時,它會引發異常,然後關閉腳本。
我的示例腳本如下:
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();
}
問題來自於客戶端。如果我使用quit
命令,則一旦其他命令完成,它將關閉服務器。但是,如果我從命令中刪除quit
,則服務器將嘗試保持打開狀態,引發異常,然後關閉服務器。
TCP客戶端
def commands
def answers
def requestSocket
def r
def w
String host = "filipekdt7"
commands = ["name",
"date",
"ip",
"quit"] //If I take out "quit" then the exceptions get thrown, but I want to leave my server script running
answers = [commands.size]
requestSocket = new Socket(host, 2000)
r = new BufferedReader(new InputStreamReader(requestSocket.getInputStream()))
w = new BufferedWriter(new OutputStreamWriter(requestSocket.getOutputStream()))
String message = r.readLine()
println "Server >" + message
for(int n = 0; n < commands.size; n++) {
sendMessage(commands[n],w)
answers[n] = r.readLine()
}
w.flush()
w.close()
public String sendMessage(def msg, def w) {
w.write(msg+"\r\n")
w.flush()
println "Client>" + msg
}
有誰知道一種方法來保持服務器的腳本來運行?我覺得我只是看起來很簡單。
啊,謝謝@Binil Thomas!你絕對正確。我感謝你解釋爲什麼它拋出異常。 – StartingGroovy 2011-06-03 18:43:01