第一项 C/S Socket实现文件上传
来源:互联网 发布:山东省网络销售额 编辑:程序博客网 时间:2024/06/02 06:49
第一项 C/S Socket实现文件上传
一、C/S是什么?
(Client/Server)结构,即客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。C/S要求客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。PS:相对于的是B/S结构。
二、Socket是什么?
TCP/IP常见五层网络模型:应用层 传输层 网络层 数据链路层 物理层。应用层一般是基于tcp之上的通信协议包括http等,传输层包括tcp、udp协议、网络层包括ip协议。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
三、网络编程
TCP连接C/S三次握手
代码逻辑:
服务器:
int listenfd, connfd; struct sockaddr_in servaddr; char buff[4096]; int n; if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){ printf("create socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(6666); if( bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){ printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } if( listen(listenfd, 10) == -1){ printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } printf("======waiting for client's request======\n"); while(1){ if( (connfd = accept(listenfd, (struct sockaddr*)NULL, NULL)) == -1) { printf("accept socket error: %s(errno: %d)",strerror(errno),errno); continue; } n = recv(connfd, buff, MAXLINE, 0); buff[n] = '\0'; printf("recv msg from client: %s\n", buff); close(connfd); } close(listenfd);
客户端:
int sockfd, n; char recvline[4096], sendline[4096]; struct sockaddr_in servaddr; if( argc != 2){ printf("usage: ./client <ipaddress>\n"); exit(0); } if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ printf("create socket error: %s(errno: %d)\n", strerror(errno),errno); exit(0); } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(6666); if( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){ printf("inet_pton error for %s\n",argv[1]); exit(0); } if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){ printf("connect error: %s(errno: %d)\n",strerror(errno),errno); exit(0); } printf("send msg to server: \n"); fgets(sendline, 4096, stdin);if( send(sockfd, sendline, strlen(sendline), 0) < 0){ printf("send msg error: %s(errno: %d)\n", strerror(errno), errno); exit(0);}close(sockfd);exit(0);
四、参考链接
http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx
五、实现文件上传
1、文件内容匹配使用MD5加密算法
MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆;所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文。
2、文件读写操作
- 第一项 C/S Socket实现文件上传
- c++ 应用socket实现C/S端文件的传输
- java socket 实现c/s文件上传下载功能+注册登录
- socket实现c/s连接
- android文件上传 socket实现
- socket实现http文件上传
- socket 实现文件上传实例
- ViewPager中第一项和最后一项实现事件响应
- c++ 使用socket实现C/S端文件的下载传输
- c++ 使用socket实现C/S端文件的下载传输
- c++ 使用socket实现C/S端文件的下载传输
- c++ 使用socket实现C/S端文件的下载传输
- c++ 使用socket实现C/S端文件的下载传输
- Java中用Socket实现文件上传
- C# Socket实现断点上传文件
- 利用socket实现自动上传文件
- 用Socket实现HTTP文件上传
- 利用Socket serverSocket实现文件上传
- C++中的基础相关知识之内联函数inline,extern,条件编译
- 阿里云CentOS安装Jenkins
- 第八周-【项目2
- Android BottomNavigationBar底部导航控制器的使用1
- 宿主机通过桥接方式连接的VMware内部Ubuntu 14.04虚拟机实现上网方案
- 第一项 C/S Socket实现文件上传
- 第九周项目2
- 软件测试--静态白盒测试
- Mac 使用技巧
- #779 – 旋转变换动画(Animating a Rotation Transform)
- 第九周 项目2-二叉树遍历的递归算法
- 凸优化初步
- 位移,渐变
- XRecyclerView的下拉刷新和上拉加载