服务器端大文件如何传给客户端,客户端与服务器如何进行数据传输

感觉自己对于网络传输的问题一直很困惑。网上查阅的资料也不是自己想要的,所以只好到这里来求大神帮助!

最近在做聊天室,客户端是android,我自己在本地搭了workerman当做服务器。两边都是采用websocket协议。

我用inputstream读取txt文件通过websocket发送到服务器,服务器接受到数据后写入txt文件。这时txt文件正常能够打开。

现在我用同样的方法读取android录音出来的.amr文件发送到服务器并写入.amr文件中,会出现文件损坏无法打开的问题。

基于此,感觉自己平时只注重软件功能的实现而不注重计算机原理的弊端出现了。出现了一些自己也觉得很幼稚的问题:

1:网络之间是如何传输数据的?

我将音频文件读取出来转换成二进制传输到服务端,服务端怎么将这些二进制恢复成原来的文件呢?

2:如何解决上面说的文件损坏无法打开的问题?

还是说我的理解一开始就是错的,感觉将音频文件读取出来就是不行?而应该用什么方法将音频文件进行转换才能传送呢?

客户端android代码:

mConnection.connect(wsuri, new WebSocketHandler() {

@Override

public void onOpen() {

Log.d(TAG, "Status: Connected to " + wsuri);

InputStream is = null;

try {

is = new FileInputStream(_file);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

byte[] bytes = new byte[1024];

int len = 0;

try {

while((len=is.read(bytes))!=-1)

{

Log.d(TAG, "senBinaryMessage: " + bytes);

mConnection.sendBinaryMessage(bytes);

}

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

服务端代码:

$worker->onMessage = function($connection, $data)

{

$filePath="/Users/myname/Desktop/php/";

if (!file_exists($filePath)){//如果指定文件夹不存在,则创建文件夹

mkdir($filePath , 0777);

}

$name=$filePath.'voice'.'.amr';

$fp = fopen ($name,"a");

if (fwrite ($fp,$data)){

echo "写入模板成功";

} else {

fclose ($fp);

echo "写入模板失败!";

}

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值