Fra*_*ver 1 java sockets bufferedreader
我目前正在用Java编写一个打开套接字的应用程序,它应该通过它接收和发送数据.
据我所知,BufferedReader.readLine()在缓冲区为空时返回null.但是,我的代码不会从读取BufferedReader中的行的循环中退出.我的想法是,我收到一个歌曲列表,然后将值发送到开始播放歌曲的服务器.
这是代码:
package me.frankvanbever.MediaServerClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class MediaServerClient {
/**
* @param args
*/
public static void main(String[] args) {
Socket server;
try {
server = new Socket( "10.42.0.41" , 2626 );
InputStream in = server.getInputStream();
OutputStream out = server.getOutputStream();
BufferedReader bin = new BufferedReader( new InputStreamReader( in ) , 4096);
String inputline;
while( (inputline = bin.readLine()) != null){
System.out.println(inputline);
}
System.out.println("exited loop");
out.write('1');
} catch (UnknownHostException e) {
} catch (IOException e) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是正常的行为吗?服务器是用python编写的,我可以更改源代码.
据我所知,BufferedReader.readLine()在缓冲区为空时返回null.
不会.null一旦基础回报被关闭,它将返回.如果您要连接的服务器未关闭连接,BufferedReader则只会挂起,等待下一行文本.
不要忘记TCP是面向流的(按原样BufferedReader).除非您将其放入协议中,否则没有任何"完整消息"的迹象.这就是为什么协议通常包括消息终止符之类的东西,或者它们在发送之前指定消息中有多少数据.
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |