2013-10-06 55 views
-1

我有2个程序:一个客户端和一个服务器。BufferedReader readLine和OutputStreamWriter .write

服务器创建一个ServerSocket和客户端使用:

address = InetAddress.getByName(host); 
conn = new Socket(address, port); 

这个工作,但现在的问题是:一旦点击鼠标时void mousePressed() {被调用,执行这样的:(客户端)

void mousePressed() { 
    try { 
    BufferedOutputStream os = new BufferedOutputStream(conn.getOutputStream()); 
    OutputStreamWriter osw = new OutputStreamWriter(os, "US-ASCII"); 
    osw.write("123"); 
     osw.flush(); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
} 

服务器应该使用接收输入:

BufferedReader reader = new BufferedReader(
new InputStreamReader(new BufferedInputStream(conn.getInputStream()))); 
StringBuilder result = new StringBuilder(); 
for (String line = null; (line = reader.readLine()) != null;) { 
    result.append(line); 
} 
reader.close(); 
println(result.toString()); 

服务器仅在套接字关闭后才接收输入:客户端上的conn.close();或退出客户端。由于我想多次点击鼠标,我无法关闭套接字。

如何在不关闭套接字的情况下发送输入信息?

编辑:连接代码:

服务器:

// init 
    ServerSocket socket1; 
    int main_port = 5204; 
    // in main 
    try { 
      socket1 = new ServerSocket(main_port); 
      Socket conn = socket1.accept(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

客户:

// init 
    String host = "localhost"; 
    int port = 5204; 
    Socket conn; 
    InetAddress address; 
    // in main 
    try { 
      address = InetAddress.getByName(host); 
      conn = new Socket(address, port); 
     } catch (Exception e) { 
       e.printStackTrace(); 
      } 
+1

另外,**永远不会**异常.'catch(Exception e){}'什么都不做! –

+0

提示的名称是'readLine()'。它读取一行文字,而你没有发送。尝试发送一个换行符,即'\ n' –

+1

@ShashankKadne更糟糕的是它会抛出您可能需要知道的错误,尤其是如果您的软件无法正常工作。 –

回答

1

我的解决方案(基于其他的答案和注释):

1)在客户端更改osw.write("123");osw.write("123\n");

2)更换

BufferedReader reader = new BufferedReader(new InputStreamReader(new 
BufferedInputStream(thread_cnn.getInputStream())));   
     StringBuilder result = new StringBuilder(); 
     for (String line = null; (line = reader.readLine()) != null;) { 
    result.append(line); 
} 
println(result); 
reader.close(); 

BufferedReader reader = new BufferedReader(new InputStreamReader(new BufferedInputStream(conn.getInputStream())));   
String result = reader.readLine().toString(); 
println(result); 
reader = null; 
result = null; 

在服务器上。

0

你正在编写一个不完整的线,并尝试读取完整的生产线。用换行符终止发送的文本,以便在到达时读取它。

另外,不要忽略和忽略异常。如果出现问题,你会想知道它。

try { 
    BufferedOutputStream os = new BufferedOutputStream(conn.getOutputStream()); 
    OutputStreamWriter osw = new OutputStreamWriter(os, "US-ASCII"); 
    osw.write("123\n"); 
    osw.flush(); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
+0

,使服务器进入for循环一次,但它仍然不输出'result.toString()',直到客户端关闭套接字。 – Laurent

+0

这是因为服务器有一个循环尝试读取客户端发送的所有内容,直到客户端关闭套接字为止。如果你不希望发生这种情况,请删除循环。 – Joni

相关问题