从Windows读取文本文件并在C中写入Linux服务器

时间:2014-04-07 07:19:38

标签: c# c linux

我正在研究客户端 - 服务器应用程序。客户端项目在VS 2012 C#中设计,服务器端编码在C中完成。基本目标是客户端应用程序将读取文件并将其发送到服务器,服务器应用程序将其写入服务器。将要发送的文本文件包含数据

  

ls.db

abs.tst=8745566

xyz.xys=2239482

kpy.llk=0987789

但是当它写在服务器上时,它写为

abs.tst=8745566xyz.xys=2239482kpy.llk=0987789

应用程序完全读取发送的字节数。但是在写入文件时,最后会丢失一些字节。当我检查客户端文件和服务器文件的属性时,服务器大小文件丢失了6字节我给了我的客户端和服务器代码,请指导我如何解决这个问题

  

C#中的客户端代码

string[] lines = System.IO.File.ReadAllLines("local.db");
var binWriter = new   System.IO.BinaryWriter(System.IO.File.OpenWrite("l2.db"));
foreach (string line1 in lines)
{
    sslStream.Write(Encoding.ASCII.GetBytes(line1.ToString()));     
}
sslStream.Write(Encoding.ASCII.GetBytes("EOF"));
  

基于Linux的服务器代码C

FILE * file = fopen("local2.db","w+");
memset(buff,0,sizeof(buff));
if(file!=NULL){
    num = SSL_read(ssl,buff,sizeof(buff));
    while(num>0){
        if(strcmp(buff,"EOF")==0){
            fclose(file);
            break;
        }else{
            fwrite(buff,1,num,file);
            memset(buff,0,sizeof(buff));
            num = SSL_read(ssl,buff,sizeof(buff));
        }
    }
}

1 个答案:

答案 0 :(得分:1)

sslStream.write()不会插入任何换行符(\n\r\n)字符。 File.ReadAllLines() does not include line-end characters either

因此,您正在编写一个长字节序列而没有任何分隔行终止符。这应该很容易修复:

string[] lines = System.IO.File.ReadAllLines("local.db");
var binWriter = new   System.IO.BinaryWriter(System.IO.File.OpenWrite("l2.db"));
foreach (string line1 in lines)
{
    // Write line with UNIX-style end-of-line character
    sslStream.Write(Encoding.ASCII.GetBytes(line1.ToString() + "\n"));
}
sslStream.Write(Encoding.ASCII.GetBytes("EOF"));

如果您想获得该文件的精确副本,请不要使用ReadAllLines()。使用ReadAllBytes()

byte[] filedata = System.IO.File.ReadAllBytes("local.db");
sslStream.Write(filedata);