我有这台服务器:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import javax.json.Json;
import javax.json.stream.JsonParser;
public class TestServer
{
static ServerSocket serverSocket = null;
static boolean done = false;
public static void main(String[] args)
{
try
{
serverSocket = new ServerSocket(9995);
// windows cmd: netstat -a -b -n | findstr 9995
}
catch (Exception e)
{
e.printStackTrace();
}
while (!done)
{
System.out.println("accepting connections on port " + serverSocket.getLocalPort());
try
{
Socket clientSocket = serverSocket.accept();
System.out.println("connection accepted");
Thread temp = new Thread(new ClientHandler(clientSocket));
temp.run();
}
catch (IOException e)
{
if (!done)
{
e.printStackTrace();
}
}
}
}// end main
}
class ClientHandler implements Runnable
{
Socket connection;
JsonParser parser;
ClientHandler(Socket connection)
{
this.connection = connection;
}
public void run()
{
System.out.println("someone connected from " + connection.getLocalAddress());
// http://docs.oracle.com/javaee/7/tutorial/doc/jsonp004.htm
try
{
parser = Json.createParser(connection.getInputStream());
while (connection.isConnected())
{
while (parser.hasNext())
{
JsonParser.Event event = parser.next();
switch (event)
{
case START_ARRAY:
case END_ARRAY:
case START_OBJECT:
case END_OBJECT:
case VALUE_FALSE:
case VALUE_NULL:
case VALUE_TRUE:
System.out.println(event.toString());
break;
case KEY_NAME:
System.out.print(event.toString() + " "
+ parser.getString() + " - ");
break;
case VALUE_STRING:
case VALUE_NUMBER:
System.out.println(event.toString() + " "
+ parser.getString());
break;
}
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}// end ClientHandler
和它的客户端:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.json.*;
import javax.json.JsonWriter;
public class TestClient
{
static Socket s;
static OutputStream output;
static InputStream input;
public static void main(String[] args)
{
try
{
s = new Socket("localhost", 9995);
output = s.getOutputStream();
input = s.getInputStream();
JsonWriter jsonWriter = Json.createWriter(output);
JsonObject hello = Json.createObjectBuilder()
.add("firstName", "Duke")
.add("lastName", "Java")
.add("age", 18)
.add("streetAddress", "100 Internet Dr")
.add("city", "JavaTown")
.add("state", "JA")
.add("postalCode", "12345")
.add("phoneNumbers", Json.createArrayBuilder()
.add(Json.createObjectBuilder()
.add("type", "mobile")
.add("number", "111-111-1111"))
.add(Json.createObjectBuilder()
.add("type", "home")
.add("number", "222-222-2222")))
.build();
jsonWriter.writeObject(hello);
}
catch (UnknownHostException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
当我运行两个(服务器优先)时,我最终得到了这个:
线程中的异常" main" javax.json.JsonException:自动检测流
的编码时出现I / O错误在哪里可以设置流的编码类型?我该怎么设置它?我是否需要为客户端和服务器执行此操作?
谢谢,
答案 0 :(得分:3)
而且......它只缺少一行代码:
jsonWriter.close();
在jsonWriter.writeObject
之后不确定如何专门回答评论,但我希望保持连接打开,以便能够发送更多消息而无需每次都重新建立它(但是没有达到我希望看到的代码单个消息首先工作!)