Android socket编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android socket编程相关的知识,希望对你有一定的参考价值。

android作为服务器端,接收pc端发来的文件,pc端是用c写的:
do

readlen=fread(buf,sizeof(char),MAX_LEN,fp_in);
if(readlen>0)

count+=readlen;
nSend = send(nSocket, buf, readlen, 0); //正式传输 循环把文件上传

while(count<File_length);//循环读取文件

pc端把文件发送完以后在Android端能完全接收到,但是接收完却退不出下面的那个while循环:

while((m=inputStream.read(bc))>=0)


fileOutputStream.write(bc,0,m);
fileOutputStream.flush();
Log.i(tag, String.valueOf(m));



也就是说read一直不返回了啊。。。
不知道为什么。。该怎样改才行啊,求指导!!!!

这是read方法阻塞了。
发送方可以先将文件长度发送到接收方。接收方收到足够的字节数后退出while。
或者
发送方发送完毕后发送一个结束标志。接收方收到指定的标志后退出while。
或者
发送方发送完数据并flush后立即关闭socket。关闭socket后接收方的read会返回-1.

估计你的c端在发送完数据后没有关闭socket连接。如果不需要等待接收端反馈的话可以在发送端立即关闭socket连接。
参考技术A 试试先判断inputStream.available()>0再read

以上是关于Android socket编程的主要内容,如果未能解决你的问题,请参考以下文章

聊天应用程序使用Socket编程android

天地币:所用到的 Android Socket 通讯编程技术试验

android Socket编程注意点

Socket通信 客户端(Android)

Socket通信 客户端(Android)

Socket通信 客户端(Android)