服务端C#代码示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace TcpServerDemo
{
class Program
{
static void Main(string[] args)
{
TcpListener tcpListener = new TcpListener(System.Net.IPAddress.Parse("127.0.0.1"), 9999);
tcpListener.Start();
Console.WriteLine("服务端开始监听.....");
while (true)
{
var client = tcpListener.AcceptTcpClient();
var endpoint = client.Client.RemoteEndPoint.ToString();
Console.WriteLine(endpoint + "已连接服务端");
byte[] buffer = new byte[1024];
int len = client.Client.Receive(buffer);
Console.WriteLine("接收长度为:" + len);
string str = Encoding.UTF8.GetString(buffer, 0, len);
Console.WriteLine("接收到数据为:" + str);
}
}
}
}
客户端Android代码示例:
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class MainActivity extends AppCompatActivity {
//上传文件
private void uploadFile(String host, int port, String path, String fileName, long startPosition) {
Socket socket = null;
OutputStream outputStream = null;
FileInputStream fileInputStream = null;
try {
socket = new Socket(InetAddress.getByName(host), port);
outputStream = socket.getOutputStream();
fileInputStream = new FileInputStream(new File(path, fileName));
long skipSize = fileInputStream.skip(startPosition);
Log.d("Socket", "跳过长度为:" + skipSize);
byte[] buffer = new byte[1024 * 1024];
int len = 0;
while ((len = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
outputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (outputStream != null) {
outputStream.close();
}
if (fileInputStream != null) {
fileInputStream.close();
}
if (socket != null) {
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
实现TCP断点上传后台C#服务接收的完整攻略:
1.服务端开启TCP监听:在服务端上编写监听端口的代码,等待客户端连接。
2.客户端进行TCP连接:使用Socket进行服务端连接并跳过已经上传的文件内容。
3.客户端将需要上传的文件进行分块:由于文件可能非常大,所以需要将文件按照固定大小进行分块,同时记录已经上传的位置,便于下次上传时进行文件位置的跳过。
4.客户端将分块的文件上传到服务端:使用Socket传输分块后的文件数据。
5.服务端接收到数据并存储:服务端接收到客户端传输的数据并进行存储,同时对于已经存储的数据进行断点判断,便于下次接收继续添加。
6.客户端继续上传:如果客户端判断还有未上传完的数据,则继续进行分块上传,避免重复上传数据。
代码示例1:服务端C#代码
代码示例2:客户端Android代码
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android实现TCP断点上传 后台C#服务接收 - Python技术站