程序需求
- 客户端接受用户输入的传输文件名
- 客户端请求服务器端传输该文件名所指文件
补充说明
- 当指定文件不存在的时候,服务器端不传输文件,客户端仍生成一个无内容的同名文件
- 环境: Ubuntu 16.04,C++11,gcc version 5.4.0
- 非常简陋的一个实现,客户端每次启用只能向服务器请求下载一个文件,要下载多次需要多次启动服务器端
服务器端代码
#include <iostream>
#include <string>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
const int bufSize = 1024;
void error_handling(const std::string &message);
int main(int argc, char *argv[])
{
int serv_sock, clnt_sock;
char buffer[bufSize];
int str_len, i;
struct sockaddr_in serv_addr, clnt_addr;
socklen_t clnt_addr_sz;
if(argc != 2) {
std::cout << "Usage : " << argv[0] << " <port>" << std::endl;
exit(1);
}
serv_sock = socket(PF_INET, SOCK_STREAM, 0);
if(serv_sock == -1)
error_handling("socket() error");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(argv[1]));
if(bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1)
error_handling("bind() error");
if(listen(serv_sock, 1) == -1)
error_handling("listen() error");
clnt_add