【发布时间】:2014-01-18 23:50:25
【问题描述】:
我想通过异步推送和拉取功能从一个端点向另一个端点发送/接收连续的数据流(peer2peer)
所以首先要解决通信问题,我从 jax-ws SOAP 绑定 Web 服务开始,因为它有一个用于推送机制的端点和 ws 寻址,但它似乎有很多开销(根据文档很重,而且由于不熟悉 ws -*,我还没有实现它,因为稍后我需要多个客户端监听流,并且流是 24/7 我想要线程可管理的套接字)。
然后我使用了 jax-rs,但其中不包含 ws-addressing。(jax-rs 2.0) 我还查看了 websockets,但它需要一个应用服务器,但我想要一个 jvm 支持的代码
所以,现在我正在尝试使用基本套接字,但我遇到的问题是通过服务器和客户端连续接收数据的套接字流式传输数据。 它适用于第一次阅读,但没有进一步。 其次,我怎样才能让它异步?
public class sSocket {
public static void main(String args[]) throws IOException{
int i = 15000;
ServerSocket ss;
Socket socket = null;
ss = new ServerSocket(i);
try
{
socket = ss.accept();
socket.setKeepAlive(true);
int iii = 0;
System.out.println("New connection accepted " + socket.getInetAddress() + ":" + socket.getPort());
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while(iii<9)
{
Thread.sleep(2000);
output.write("good" + iii + "\n");
//System.out.print(input.readLine().toString());
output.flush();
iii++;
}
//socket.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
public class cSocket {
public static void main(String args[]) throws InterruptedException, IOException{
Socket client = new Socket("127.0.0.1", 15000);
try{
client.setKeepAlive(true);
DataOutputStream out = new DataOutputStream(client.getOutputStream());
out.writeBytes("Hi Server! I'm " + client.getLocalSocketAddress() + "\n" );
BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
String s;
while(true){
if((s = input.readLine()) != null)
{
System.out.println("Message from Server: " + s);
}}
//client.close();
}
catch(Exception e){
e.printStackTrace();
}
}
}
[toString() 不可用 - 没有挂起的线程] 我看到这会在 Eclipse 中停止代码。 问题似乎本质上源于客户端的 input.readLine():错误是连接重置:我认为这是因为 readLine() 已达到“EOF”
【问题讨论】:
标签: java sockets bufferedreader