利用TCP/UDP完成文件传输的设计和实现
1) 利用循环面向连接的模型完成固定文件的传输(考虑服务器地址、端口号的设定方式)
2) 由固定文件扩展成手动输入或选择文件;
3) 参考connectTCP的方式对程序进行抽象、封装;
客户端
建立socket
确定服务器scokaddr_in结构体
点分十进制IP转换
使用connect连接
打开文件
准备缓冲区
缓冲区初始化置空
将文件内容读入缓冲区
使用send将缓冲区内容发送到服务器
文件内容发送完成
关闭文件
关闭socket
服务器
建立socket
确定服务器scokaddr_in结构体
点分十进制IP转换
使用bind绑定套接字
使用listen监听
使用accept接受连接请求
accept返回新的套接字描述符
使用recv接收传来的数据(文件路径)
打开文件,这里需要文件名
从该字符串获取文件名
使用recv接收文件内容
判断recv函数返回的状态
将接收到的内容放入缓冲区
将缓冲区内容写入文件
关闭文件
关闭socket
客户端代码
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <netinet/in.h>
#include <errno.h>
#include <memory.h>
#include <stdlib.h> //for malloc
#define BUFFER_SIZE 1024
int main()
{
int sockcd;
struct sockaddr_in server;
char filepath[100];//file to translate
FILE *fp;
int lenpath; //filepath length
char *buffer;//file buffer
int fileTrans;
buffer = (char *)malloc(sizeof(char)*BUFFER_SIZE);
bzero(buffer,BUFFER_SIZE);
//memset(buffer,0,sizeof(buffer));
if((sockcd = socket(AF_INET,SOCK_STREAM,0))<0)
{