浏览 2184 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2005-05-12
我想client端写一个串,再读一个串。server端读一个串,再写一个串。
代码如下:Server在1处阻塞,Client在2处阻塞。这个功能应该怎样实现? Server: ServerSocket server = new ServerSocket(1025); Socket socket = server.accept(); BufferedReader reader = new BufferedReader(new InputStreamReader(socket .getInputStream())); String line = null; while ((line = reader.readLine()) != null)<----1 { System.out.println(line); } BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())); writer.write("helloWorld!"); writer.close(); reader.close(); socket.close(); server.close(); Client: Socket client = new Socket("127.0.0.1", 1025); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter( client.getOutputStream())); writer.write("helloWorld!"); writer.flush(); BufferedReader reader = new BufferedReader(new InputStreamReader(client .getInputStream())); String line = null; while ((line = reader.readLine()) != null)<---2 { System.out.println(line); } writer.close(); reader.close(); client.close(); 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2005-05-18
为什么要在1和2上阻塞线程呢?
|
|
| 返回顶楼 | |
|
时间:2005-05-19
阻塞??如果服务器端等待读,客户端也同样等待读,那么结果应该只有超时了。
其实在read的过程中,只有对方有写入的时候,才能读到内容。所以你不用考虑什么,只要保证一个在写,一个在读就可以,并且读写的长度要一致。唯一要注意的是,因为是流的操作,所以要判断读到的长度和指定的长度是否一致。也就是说,你要读1024个字节的内容,并不一定能读到1024个,可能是1000个,所以你要继续读24个字节。 前段时间用socket写一个传送文件的两个程序(一个客户端,一个服务端。注:突然想起,两个可以合到一个class里写嘛。晕自己),在同一台机器测试没有问题,但是在linux和windows通讯的时候,就因为没有注意上面的细节,一直出错。 |
|
| 返回顶楼 | |
|
时间:2005-05-19
IO一般都是阻塞的,因此你不能一直读,读不到就别再读了,要不就歇那了
|
|
| 返回顶楼 | |
|
时间:2005-05-20
不太清楚你到底要做什么,不过像这样的数据传送,使用java.nio.channel包里的东西会更方便一些。其实有很多东西是不需要blocking的。
|
|
| 返回顶楼 | |
|
时间:2005-05-20
推荐用nio
|
|
| 返回顶楼 | |






