双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

基于TCP的文件传输问题:普通TXT文件传输没有问题,但图片传输有问题。求高手解答!

stxl1164584a2 stxl1164584a2 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
闲话不多先上代码
服务器:
#include <Winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.lib")

int main(int argc, char* argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 2, 2 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return -1;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return -1;
}
unsigned int fs=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addr_server;
addr_server.sin_family=AF_INET;
addr_server.sin_port=htons(9856);
addr_server.sin_addr.S_un.S_addr=inet_addr("172.18.23.22");

err=bind(fs,((SOCKADDR*)&addr_server),sizeof(SOCKADDR_IN));
if(err!=0)
{
printf("绑定地址出错!");
return -1;
}
else
printf("绑定成功\n");
while(1)
{
printf("等待连接\n");
listen(fs,5);
int len=sizeof(SOCKADDR_IN);
unsigned int connfs=accept(fs,(SOCKADDR*)&addr_server,&len);
TCHAR buf[4000];
memset(buf,0,4000);
recv(connfs,buf,4000,0);
TCHAR name[255];
// int len;
memset(name,0,255);
sscanf(buf,"文件名:%s\t大小为:%d",name,&len);
printf("%d\n",len);
FILE *fp=_wfopen(name,"wb");
send(connfs,"ok!",strlen("ok!"),0);
while (1)
{
memset(buf,0,4000);
err=recv(connfs,buf,4000,0);
if(SOCKET_ERROR == err)
break;
fwrite(buf,1,strlen(buf),fp);
send(connfs,"ok!",strlen("ok!"),0);
}
printf("文件接收完成!");
fclose(fp);
closesocket(connfs);
}
closesocket(fs);
return 0;
}

客服端核心代码:

//while (1)//循环连接直到成功
//{
// if(InitSocket())
// break;
///}
TCHAR buf[4000];
FILE *FP=fopen("d://1.zip","rb");
if (FP==NULL)
{
MessageBox("没有该文件!");
closesocket(m_Socket_Fs);
return ;
}
fseek(FP,0,SEEK_END);
int len=ftell(FP);
if(len==-1)
{
MessageBox("文件发送错误!");
return ;
}
memset(buf,0,4000);
sprintf(buf,"文件名:1.zip\t大小为:%d",len);
send(m_Socket_Fs,buf,strlen(buf)+1,0);//发送文件名与文件大小
fseek(FP,0,SEEK_SET);
while(!feof(FP))//发送文件内容
{
len=recv(m_Socket_Fs,buf,254,0);
if(len==SOCKET_ERROR)
break;
memset(buf,0,4000);
fread(buf,1,3999,FP);
send(m_Socket_Fs,buf,strlen(buf)+1,0);//发送文件内容
Sleep(1);
}
fclose(FP);
closesocket(m_Socket_Fs);




╮(╯▽╰)╭,搞IT的伤不起啊,搞IT的菜鸟更伤不起啊,搞IT的还没毕业的伤不起啊!
...全文

相关推荐

TCP、UDP 端口测试工具

通过该工具可以测试本机、远程计算机端口是否开放,是否可以通过TCP、UDP协议正常访问,可以设置连接发送内容,查看返回值,验证端口访问是否正常。

smartclient163

拼多多Android面试题及参考答案

Android 系统采用分层架构设计,从底层到上层依次为Linux 内核层硬件抽象层(HAL)系统运行时库层应用框架层应用层,共五层。位置:Linux 内核层与系统运行时库层之间,是“硬件与系统的隔离层”。核心作用:屏蔽硬件差异,为上层提供统一的硬件访问接口,解决 Android 开源与硬件厂商闭源的矛盾,具体功能如下:硬件能力抽象:将硬件的具体实现(如不同厂商的摄像头芯片、音频芯片)封装为标准化接口(如Camera HALAudio HAL。

大模型大数据攻城狮

锐捷认证客户端常见问题解答.txt

收集了一部分使用过过程中遇到的问题,可以解决大部分的锐捷客户端出现的问题。列举了大部分锐捷客户端连不上网的问题

微笑哥丶

基于TCP套接字与自定义应用层协议的Linux客户端服务器架构双向文件传输系统-支持多线程并发处理与SHA256哈希校验的文件上传下载及远程目录列表功能-用于安全可靠的大文件跨网络.zip

wireshark基于TCP套接字与自定义应用层协议的Linux客户端服务器架构双向文件传输系统_支持多线程并发处理与SHA256哈希校验的文件上传下载及远程目录列表功能_用于安全可靠的大文件跨网络.zip

A20250FSAF

网络飞鸽传输软件源代码

飞鸽传输飞鸽传输飞鸽传输飞鸽传输飞鸽传输

hjm123
评论 9
收藏 已收藏
分享
返回顶部