【发布时间】:2017-08-14 23:46:15
【问题描述】:
我正在创建一个客户端-服务器,如下所示:
服务器:
监听线程守护进程(总是监听传入的连接)
通过连接的客户端发送/接收数据的服务对象
客户:
可以有多个客户端实例
但是,在建立连接后的任何一方,都需要永远创建 ObjectOutputStream 和 ObjectInputStream 类型的构造函数。谷歌搜索发现this 和this。我遵循以下步骤: 1.先创建ObjectOutputStream 2.冲洗它 3. 第二次创建ObjectInputStream
但这对我不起作用。想知道为什么??
服务器:
监听线程/守护进程:
Socket connSocket;
try {
ServiceListener.serverSocket = new ServerSocket(listenPort);
System.out.println("Listening on port: " + listenPort);
while (true) {
connSocket = serverSocket.accept();
nodeList.add(connSocket);
System.out.println("Accepted connections ( " + connSocket + "):" + getConnectedNodeCount());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
服务器线程(接受连接后)
for (int i=0; i<listenerObj.getConnectedNodeCount(); i++) {
try {
System.out.println(listenerObj.nodeList.get(i));
serviceTx = new ObjectOutputStream(listenerObj.nodeList.get(i).getOutputStream());
serviceTx.flush();
serviceRx = new ObjectInputStream(listenerObj.nodeList.get(i).getInputStream());
String rxMsg = (String) serviceRx.readObject();
if (rxMsg.equals("HELLO")) {
System.out.println("Service received: " + rxMsg);
serviceTx.writeObject((Object) "HELLO");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
客户:
try {
System.out.println("Creating Node socket...");
clientSocket = new Socket(getServerIp(), getServerPort());
nodeTx = new ObjectOutputStream(clientSocket.getOutputStream());
nodeTx.flush();
nodeRx = new ObjectInputStream(clientSocket.getInputStream());
System.out.println("Connected to " + getServerIp() + ":" + getServerPort());
do {
String outBoundMsg = new String();
outBoundMsg = "HELLO";
System.out.println("Node sending \"" + outBoundMsg + "\" to service");
nodeTx.writeObject(outBoundMsg);
nodeTx.flush();
String rcvdMsg = (String) nodeRx.readObject();
if(rcvdMsg.equals("HELLO")) {
System.out.println("++++ client says " + rcvdMsg + " ++++");
}
} while(false);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
服务器控制台输出:
starting Listener 11...
Service Function started !!
Listening on port: 2244
Accepted connections ( Socket[addr=/127.0.0.1,port=62994,localport=2244]):1
客户端控制台:
Creating Node socket...
【问题讨论】:
-
你使用的是线程安全的 List 实现吗?
标签: java sockets objectinputstream objectoutputstream