C#给android通过Socket发送图片的问题

niekangshibendan 2014-02-14 10:12:47
最近一个项目要C#做服务器给android发送图片和文本,但是android端接收图片老是出现问题!
C#端发送图片
 public Byte[] getphoto(string photopath)
{
string str = photopath;
FileStream file = new FileStream(str, FileMode.Open, FileAccess.Read);
Byte[] bytBLOBData = new Byte[file.Length];
file.Read(bytBLOBData, 0, bytBLOBData.Length);
file.Close();
return bytBLOBData;
}
private void SendData(string data)
{
try
{
Byte[] msg = getphoto(data);
userList[0].socket.Send(msg, msg.Length, SocketFlags.None);
MessageBox.Show("" + msg.Length);
data = string.Format("To[{0}]:{1}", userList[0].socket.RemoteEndPoint.ToString(), data);
listBoxStatu.Invoke(AppendString, data);
}
catch
{
}
}


Android端接收线程:
private class ReceiveThread extends Thread {
private BufferedInputStream dis = null;
private Socket s = null;

ReceiveThread(Socket socket) {
try {
s = socket;
dis = new BufferedInputStream(s.getInputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public void run() {
while (isConnect) {
try {
Thread.sleep(1000);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[ 1024];
int len = -1;
while ((len = dis.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();
outStream.flush();
outStream.close();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inSampleSize = 10; // width,hight设为原来的十分一
if (data.length > 0) {
bm = BitmapFactory.decodeByteArray(data, 0,
data.length, options);
if (bm != null) {
System.out.println(data.length);
myHandler.sendEmptyMessage(0);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
close();
}
}
}
}

现在的问题是每次发送图片之后android端会一直堵塞卡在len = dis.read(buffer),并不会返回-1,只有在关闭服务器之后才会返回-1并显示图片,这个显然是不行的,求各位帮帮忙看看到底是哪里的问题!
...全文
282 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
1212321321312 2014-05-06
  • 打赏
  • 举报
回复
请问你的问题解决没有,我也遇到相同的问题了
niekangshibendan 2014-02-14
  • 打赏
  • 举报
回复
引用 2 楼 licai1210 的回复:
在C#端发送完数据包以后,试试关闭连接
关闭连接的话确实能够传输图片,但是我要的不是这个!
niekangshibendan 2014-02-14
  • 打赏
  • 举报
回复
引用 1 楼 birdsaction 的回复:
第一个确保网络连接成功了。在dos下面telnet一下服务器。 然后 len = dis.read(buffer) 这地方是阻塞了。不知道你后台有没有异常。 然后看看这个。  userList[0].socket.Send(msg, msg.Length, SocketFlags.None); 不知道你的服务器socket是怎么处理的。
网络是没有问题的,毕竟也是能够传输图片,Socket那边我再检查下,不过应该是没有什么问题!
licai1210 2014-02-14
  • 打赏
  • 举报
回复
在C#端发送完数据包以后,试试关闭连接
Birds2018 2014-02-14
  • 打赏
  • 举报
回复
第一个确保网络连接成功了。在dos下面telnet一下服务器。 然后 len = dis.read(buffer) 这地方是阻塞了。不知道你后台有没有异常。 然后看看这个。  userList[0].socket.Send(msg, msg.Length, SocketFlags.None); 不知道你的服务器socket是怎么处理的。
足球中国 2014-02-14
  • 打赏
  • 举报
回复
弄一个handler然后sendmessage.
niekangshibendan 2014-02-14
  • 打赏
  • 举报
回复
使用base64传递字符串实现了功能,但是占用的内存比较大~~~!不知道大家还有没有更好的办法,星期一上班再结贴!

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧