c语言文件传输

c语言文件传输,第1张

服务器端(发送文件):首先打开文件【fopen】,用rb方式打开,既可以发送文本文件,也可以发送二进制文件,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充慧侍服务器的地址,即填充sockaddr_in结构,然后进行绑定【bind】,设置套接字为监听套接字【listen】,接收连接【accept】,至哪碧逗此服务器阻塞,等待客户端的连接。

客户端(接收文件):首先打开文件【fopen】,用wb方式打开,在无错时初始化套接字socket,即初始化socket库【WSAStartup】,分配socket【socket】,填充客户端的地址,即填充sockaddr_in结构,然后进行绑定【bind】,再填充服务器的地址结构,然后调用【connect】进行连接,当连接成功后,第一阶段的工作便结束了。

第二阶段,发送文件。

服务器端:使用循环while,结束条件是(!feof(fp)),fp是文件指针,feof检测当前的文件读取指针是否到达文件尾部,若到达了就返回真,否则返回假。然后在循环内部依次调用【fread】、【send】进行发送。这里有一个问题需要注意,调用fread的时候有两个参数是要每次读多少字节和读多少次,将第一个设李卖置为1,将第二个设置为缓冲区的大小,用一个变量记录实际读到多少字节,即【fread】的返回值,然后将其传递给【send】,就可以实现发送文件了,在发送完成后断开连接【closesocket】,关闭文件【fclose】。

客户端:使用while死循环,调用【recv】接收文件,【fwrite】写入文件,这里也有个和上面类似的问题,就是要将recv的返回值传递给fwrite的第三个参数,即受到了多少字节,就向文件中写多少字节。当recv返回值为0时(连接断开时)退出循环,【closesocket】关闭套接字,调用【fclose】关闭文件。

在另一个函数内调用该函数。从而得到该函数的返回值,实现悉扰裤传李乱递。

例:

int

sum(int

m,int

n)

{

return

m+n

}

void

main()

{

printf("%d",sum(3,6))

}

此例中,睁简main函数在输出语句中调用sum函数从而得到sum函数的返回值并输出

在C 语言中没有办法把其他文件里的内容传递给主函数 main( )。因为任何一个 C 语言源程序都是从 main( ) 函数开始执行的。所以只能够在主衫虚函数 main( ) 中配塌凯,将文件里的内容传递给用户自定义的子函数才对。培唤例如如下 C 程序:

#include <stdio.h>

#define MAX 100

void main( )

{

FILE * fpr

char file_buffer[MAX]

fpr = fopen("my_textfile", "r" ) /* 以读方式打开 my_textfile 文本文件 */

if( fpr == NULL )

{ /* 若文件打开失败,则退出系统 */

printf("Can't open my_textfile for read!\n")

exit(1)

}

fgets(buffer, MAX, fpr) /* 从文件中读入一行数据 */

my_subfunc(buffer) /* 调用用户自定义的子函数 */

puts(buffer) /* 显示处理后的结果 */

fclose(fpr) /* 关闭文件 */

}

my_subfunc(char buffer[ ])

{

int i = 0

for( i = 0 buffer[i] != '\0' i++)

buffer[i] += 2

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/8225212.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存