论坛首页 Java版

[提问]这段关于socket的问题应该怎样实现?

浏览 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();
   
时间:2005-05-18
为什么要在1和2上阻塞线程呢?
   
0 请登录后投票
时间:2005-05-19
阻塞??如果服务器端等待读,客户端也同样等待读,那么结果应该只有超时了。
其实在read的过程中,只有对方有写入的时候,才能读到内容。所以你不用考虑什么,只要保证一个在写,一个在读就可以,并且读写的长度要一致。唯一要注意的是,因为是流的操作,所以要判断读到的长度和指定的长度是否一致。也就是说,你要读1024个字节的内容,并不一定能读到1024个,可能是1000个,所以你要继续读24个字节。

前段时间用socket写一个传送文件的两个程序(一个客户端,一个服务端。注:突然想起,两个可以合到一个class里写嘛。晕自己),在同一台机器测试没有问题,但是在linux和windows通讯的时候,就因为没有注意上面的细节,一直出错。
   
0 请登录后投票
时间:2005-05-19
IO一般都是阻塞的,因此你不能一直读,读不到就别再读了,要不就歇那了
   
0 请登录后投票
时间:2005-05-20
不太清楚你到底要做什么,不过像这样的数据传送,使用java.nio.channel包里的东西会更方便一些。其实有很多东西是不需要blocking的。
   
0 请登录后投票
时间:2005-05-20
推荐用nio
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐