网络编程之Linux服务器与Windows客户端图片传输

前言

网络上有许多关于socket传输文件、图片的文章,但是又许多服务,端客户端都在Linux平台上,而现实中,往往服务端是Linux系统,客户端是Windows系统,所以这次我实现了两个系统平台的文件传输,更符合实际,总之,一句话,socket原理都一样,流程都一样,接下来看代码:

一、客户端

说明:windows下的socket我已经进行了封装,我已经上传到我的资源,大家可以去下载winsocket的封装下载,另外,传输数据过程中,为保证数据的准确性,加入了CRC校验,crc校验的封装下载

#include<stdio.h>
#include<stdlib.h>
#include"CWinSocketClient.h"
#include"crc32.h"
#include<iostream>
using namespace std;

#define REQUEST_COVER        108   //请求封面
/*数据包头*/
typedef struct header_t
{
   
 int type;                //包类型
 int size;                //包大小,根据包大小读取包体数据
 unsigned int crc;        //报数据crc校验码
}HEADER_T;

/*客户端请求视频封面*/
typedef struct reqvdcover_t
{
   
 int user_id;             //用户id
 char picture_name[32];   //图片名字
}REQVDCOVER_T;

/*服务器回应客户端封面*/
typedef struct ansclientcover_t
{
   
 char pic_name[32];       //视频名字
 int length;              //每次发送长度
 char buff[512];          //图片数据,
}ANSCLIENTCOVER_T;

int main(int argc, char** argv)
{
   
    CWinSocketClient t;	  
    t.start();	
    MyCrc32 *crc_check = new MyCrc32();     //定义一个32位的crc校验对象
    crc_check->init_crc_table();            //初始化校验表
    //输入向服务器请求的文件名称
    char file_name[32];
    memset(file_name,0, sizeof(file_name));
    printf("Please Input File Name On Server.\n");
    scanf("%s", file_name);
    //自定义数据包包头
    HEADER_T pichead;
    memset(&pichead, 0, sizeof(HEADER_T));
    pichead.type = REQUEST_COVER;
    pichead.size = sizeof(REQVDCOVER_T);
    //自定义数据包包体
    REQVDCOVER_T picbody;
    memset(&picbody, 0, sizeof(REQVDCOVER_T));
    picbody.user_id = 2;
    memcpy(picbody.picture_name, file_name, strlen(file_name)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值