Groovy Tcp客户端/服务器发送地图 [英] Groovy Tcp client/server sending maps

查看:205
本文介绍了Groovy Tcp客户端/服务器发送地图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在groovy中创建了一个基本的tcp客户端和服务器,并且我想将服务器的地图从客户端发送到客户端,我想知道是否可以发送地图并仍然可以访问这些值。

  // TCP服务器
def book1 = [书名:Groovy Recipes,作者:Scott Davis ,页数:241]

server = new ServerSocket(2000)

println(等待连接)

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

w = new BufferedWriter(new OutputStreamWriter(output))
String message =连接成功

r = new BufferedReader(new InputStreamReader(input))

while(true){

if(message!= null){
w.writeLine(message)
w.flush()
message = null
}

String a = r.readLine()

if(a ==book1){
message = book1
} else {
message =$ a command unknown。
sendMessage(message)
println message
message = null
}
}
}
}
}

def sendMessage(String msg){
try {
w.writeLine(msg)
w.flush();
} catch(IOException ioException){
ioException.printStackTrace();


$ / code $ / pre

这是我的客户端(我想要接收地图并获取值)

  // TCP客户端

def grabBookInfo {
queryData()
}

public void queryData(){
def hosts = [localhost]

for(int aHost = 0; aHost< hosts.size; aHost ++){
bookClient(hosts [aHost]);



public void bookClient(){
def commands = [book1]
def answers = [commands.size]

def requestSocket = new Socket(host,2000)

r = new BufferedReader(new InputStreamReader(requestSocket.getInputStream()));
w = new BufferedWriter(new OutputStreamWriter(requestSocket.getOutputStream()));

字符串消息=连接成功

message = r.readLine()
println(服务器>+消息)

for(int n = 0; n< commands.size; n ++){
sendMessage(commands [n]);
答案[n] = r.readLine()
}

//在此获取地图值
//答案[0] =预订
/ / println Book。['Book Title']
// println Book。['Author']
// println Book。['Number of Pages']

w .flush()
w.close()
}

public void sendMessage(msg){
w.write(msg +\r\\\
);
w.flush();
System.out.println(client>+ msg);
}
}

我在正确的轨道上吗?

解决方案

序列化地图,示例

http://www.java2s.com/Tutorial/Java/0140__Collections/SerializingHashMaps.htm


I created a basic tcp client and server in groovy and I'm wanting to send maps from the server to the client, I'm wondering if I'm able send maps across and still being able to access the values.

//TCP Server
def book1 = [Title of Book: "Groovy Recipes", Author: "Scott Davis", Number of Pages: "241"]

server = new ServerSocket(2000)

println("Waiting for connection")

while(true) {
    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) {
                    w.writeLine(message)
                    w.flush()
                    message = null
                }

                String a = r.readLine()

                if(a=="book1") {
                    message = book1
                } else {
                    message = "$a command unknown."
                    sendMessage(message)
                    println message
                    message = null
                }
            }
        }
    }
}

def sendMessage(String msg) {
    try {
        w.writeLine(msg)
        w.flush();
    } catch(IOException ioException) {
        ioException.printStackTrace();
    }
}

Here is my Client (where I'm wanting to receive the map and get the values)

//TCP Client

def grabBookInfo {
    queryData()  
}

public void queryData() {
    def hosts = ["localhost"]

    for(int aHost = 0; aHost < hosts.size; aHost++) {
        bookClient(hosts[aHost]);
    }
}

public void bookClient() {
    def commands = ["book1"]
    def answers = [commands.size]

    def requestSocket = new Socket(host, 2000)

    r = new BufferedReader(new InputStreamReader(requestSocket.getInputStream()));
    w = new BufferedWriter(new OutputStreamWriter(requestSocket.getOutputStream()));

    String message = "Connection was successful"

    message = r.readLine()
    println("Server>" + message)

    for(int n = 0; n < commands.size; n++) {
        sendMessage(commands[n]);
        answers[n] = r.readLine()
    }

    //get map values here
    //answers[0] = Book
    //println Book.['Title of Book']
    //println Book.['Author']
    //println Book.['Number of Pages']

    w.flush()
    w.close()
}

public void sendMessage(msg) {
    w.write(msg+"\r\n");
    w.flush();
    System.out.println("client>" + msg);
    }   
}

Am I on the right track?

解决方案

Serialize the maps, example

http://www.java2s.com/Tutorial/Java/0140__Collections/SerializingHashMaps.htm

这篇关于Groovy Tcp客户端/服务器发送地图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆