我有一个简单的客户端,我正在从我的Android设备进行测试,我正在测试telnet服务器调用telehack.com。问题是当我从菜单项列表中请求某个选项时,数据被发送但未收到。 选项是来临(巨大的冒险)。我尝试了各种实现(socket,socketchannel和select),在发送advent后仍然遇到同样的问题没有收到数据,菜单中的其他选项工作正常。更糟糕的是,我从Playstore下载了各种telnet客户端,他们似乎遇到了同样的问题。 (除了似乎使用c ++ NDK套接字库的Mobile Telnet之外)。
另外,在Windows上查看和Wireshare和telnet客户端显示没有任何异常,并且数据被发回。
public void run() {
mRun = true;
try {
Socket sc = new Socket(SERVER_IP, SERVER_PORT);
inBuffer = new DataInputStream(sc.getInputStream());
outBuffer = new DataOutputStream(sc.getOutputStream());
Log.e("TCP Client", "C: Connecting...");
if (mConnectionListener != null)
mConnectionListener.connectionStatusChanged(true);
sc.setSoTimeout(5*60*1000); //Socket timeout = 4 minutes
sc.setTcpNoDelay(true);
sc.setKeepAlive(true);
try {
while (mRun) {
int size = inBuffer.available();
if (size > 0)
{
byte[] readBuf = new byte[size];
inBuffer.read(readBuf);
答案 0 :(得分:0)
available()方法可以获得所需的结果,但不一定如此。有些流只返回0.使用常量大小的读缓冲区:
byte[] buffer = new byte[4096];
int bytesRead = 0;
while ((bytesRead = in.read(buffer)) >= 0){
// note that only the bytes 0 to bytesRead-1 are valid in buffer
}