今天写的代码,突然感觉自己的水平真的好低

几天调的代码,其实技术上算不上突破或者改进,不过思想或者是思维上有所提高。至少常sir给的解释还是那么的清晰,赞一个常sir!

今天写的代码是这样的,写的是传输一个文件(这个文件很大,比如在20M以上),用TCP传输,从服务器传到客户端。其实这个跟我昨天写的那个差不多,但是关键就在于自己的思路不清晰,导致出了问题,然后很郁闷的调啊调。回头看一下其实自己真的正如常sir所说:思路很混乱。

 

其实面对这个问题,很简单,就是建立一个socket链接,再打开这个文件,然后read,比如每次2048个字节(char类型的是一个字节,而整型的是4个字节),然后就是send当传送的数据少于2048时表示,已经传到末尾了,把这传完就算结束了。

 

我出的问题是这里,直接上代码:(这个是服务器端的代码,里面有问题)

 

里面的问题主要集中在自己的逻辑很乱:

1.首先这个do while语句就显得我很业余:我当初这样用是想着到最后的一次传送时数据会少于2048,我就想着要多发送一次。其实不用这样,常sir的帮助下,首先不是非要在y==2048的时候才循环,y代表的是发送的数据量,应该是只要有数据(即y大于0,就发送)

2.在那个send函数里面的2048,代表的是这次是要发送的总量,这里应该是读了多少数据就发多少数据因此这里应该是y,并且应该先读,在send。

3.那里的seek函数的作用没有起到,因为read函数读完之后的指针位置,读完之后就没有变,因此不用调指针的位置。从那个代码中也可以看到:与当前位置的偏移为0,,什么也不偏,其实没有作用;

 

正确的代码是:

 

客户端的错误也是这样:

 

 

 其中错误也是很明显

1.y==2048,是错的,判断条件应为y>0;

2.在write函数里面应该是接收了多少就写入多少,即write(buff,y)。

3.seek函数没有起到作用,因为每个循环,指针就在最后面.

4.这里的flush函数,作用是每次循环就写入磁盘,其实在这个里面不用这样,不用每次都保存。让函数在缓存满的时候再写入,也行,在close函数的时候,也会写入的。

 

应该这样写:

 

 

~~~~~~~~~

 

下面是搞清了int和char类型互转的问题。

char类型存的也是数字,只不过是通过ascii码,然后可以输出成各种字符。

从char类型专程int类型其中内存中的数字是不变的,转成的数字还是那个;

例如:char a='0'//0的ascii码是0x30,即十进制的48

int b=(int)a; 这时候b应为48

另一种情况

char a=0;//这里传给a的就是0ascii码也是0,即在内存中就是0x00

转为整型的时候就是0

 

~~~~~~~

 

今天还是有所收获的,明天继续。

今天想着周二老师可能会过来,但是自己还是多虑了。我感觉以后就大胆的过去,老师有事的话会找我的。

展开阅读全文

没有更多推荐了,返回首页