安卓获取网络服务器txt文件内容,.txt - 通过网络(客户端/服务器)传输文件 - 服务器上的.txt包含错误内容...

我正在处理客户端服务器程序。客户端向服务器发送一个.txt文件,服务器接收这个.txt文件并保存。.txt - 通过网络(客户端/服务器)传输文件 - 服务器上的.txt包含错误内容

我的问题: 如果我发送包含以下内容的文本文件:“世界,你好”(没有“”) 然后服务器recevies /保存包含以下内容的文本文件“ÿÿÿÿÿÿÿÿÿÿÿ”(没有“”)。

两个文件的文件大小是精确相同。

这里我的代码:

客户: Program.cs的

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace FTP_3___Client {

public class Program {

static void Main(string[] args) {

new Client();

}

}

}

客户: Client.cs:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.IO;

using System.Linq;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading.Tasks;

using FTP_3___Client;

namespace FTP_3___Client {

public class Client {

public string name { get; set; }

public TcpClient clientConnection { get; set; }

public NetworkStream nws { get; set; }

public StreamReader sr { get; set; }

public StreamWriter sw { get; set; }

public int sizeOfConnectedClients { get; set; }

public string clientnamelistString { get; set; }

public Client() {

connectToServer();

sendFile("zzz.txt");

}

public void connectToServer() {

Console.WriteLine("connect to server...");

clientConnection = new TcpClient();

IPAddress ipadress = IPAddress.Parse("127.0.0.1");

clientConnection.Connect(ipadress, 5555);

Console.WriteLine("connected to server!");

nws = clientConnection.GetStream();

sr = new StreamReader(nws);

sw = new StreamWriter(nws);

}

private void sendFile(string filename) {

FileStream fs = File.OpenRead(filename);

FileInfo fo = new FileInfo(filename);

long filesize = fo.Length;

Console.WriteLine("Filesize: " + filesize);

sw.WriteLine("/sendFile");

sw.Flush();

// Send filename to server

sw.WriteLine("Filename: " + filename);

sw.Flush();

// Send filesize to server

sw.WriteLine("Filesize: " + filesize);

sw.Flush();

byte[] fileBytes = File.ReadAllBytes(filename);

sw.WriteLine(fileBytes.Length);

sw.Flush();

for (int i = 0; i < fileBytes.Length; i++) {

nws.WriteByte(fileBytes[i]);

}

sr.Close();

sw.Close();

nws.Close();

Console.WriteLine("File sends!");

Console.ReadLine();

}

}

}

服务器:在Program.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace FTP_3___Server {

class Program {

static void Main(string[] args) {

new Server();

}

}

}

服务器:Server.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Threading;

using System.Net;

using System.Net.Sockets;

using System.IO;

namespace FTP_3___Server {

public class Server {

private IPAddress ipadress;

private TcpListener serverconnection;

private TcpClient clientconnection;

public NetworkStream nws { get; set; }

public StreamReader sr { get; set; }

public StreamWriter sw { get; set; }

public Server() {

startServer();

waitForClient();

}

public void startServer() {

ipadress = IPAddress.Parse("127.0.0.1");

serverconnection = new TcpListener(ipadress, 5555);

serverconnection.Start();

}

public void waitForClient() {

Console.WriteLine("Server startet. Waiting for incoming client connections...");

clientconnection = serverconnection.AcceptTcpClient();

nws = clientconnection.GetStream();

sr = new StreamReader(nws);

sw = new StreamWriter(nws);

Console.WriteLine("Client connected with Server!");

receiveMessage();

}

public void receiveMessage() {

string receivedMessage = sr.ReadLine();

switch (receivedMessage) {

case "/sendFile": {

receiveFile();

break;

}

default: {

Console.WriteLine("Received undefined message: " + receivedMessage);

break;

}

}

}

public void receiveFile() {

// Recieve filename

string filename = sr.ReadLine().Remove(0, 10);

// Recieve filesize

long filesize = Convert.ToInt64(sr.ReadLine().Remove(0, 10));

Console.WriteLine("Filename: " + filename);

Console.WriteLine("Filesize: " + filesize);

long count = filesize;

int arrayLength = Convert.ToInt32(sr.ReadLine());

byte[] filebytes = new byte[arrayLength];

for (int i = 0; i < filebytes.Length; i++) {

filebytes[i] = (byte)nws.ReadByte();

}

try {

File.WriteAllBytes(filename, filebytes);

} catch (IOException e) {

Console.WriteLine(e.StackTrace);

}

sr.Close();

sw.Close();

nws.Close();

Console.WriteLine("File was written on HDD. Finish!");

Console.ReadLine();

}

}

}

+0

不要nws.ReadByte()''的返回值盲目地转换为'byte',检查其是否返回-1作为表示流的结束。 –

+0

我改变了它,现在收到的服务器只包含11个空格的.txt文件.... –

+0

这意味着文件内容从未在服务器端收到*或*您已经读过它。也许'StreamReader'已经读取了这些字节并缓存了它们?我不认为你应该从'StreamReader' *和*直接从底层流读取。 –

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值