• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: 其他
  • 标签: TCP  C/S  网络  

资源简介

TCP协议实现客户端/服务器,能上传下载文件,客户端能显示进度,能随时终止上传下载

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 


#pragma comment(lib“ws2_32.lib“)

#define SERVER_PORT 8600
#define BACKLOG 10
HANDLE event;
SOCKET client;
unsigned int end=0;
unsigned int force_end=0;

/*进行下载*/
unsigned int _stdcall download(void *p);
/*进行上传*/
unsigned int _stdcall  update(void *p);

int main()
{
WSADATA WSData;
HANDLE hfile;
struct sockaddr_in server_addr;
char IP[20];
char filename[100];
unsigned char choice;
int ret;
HANDLE  hThread;  
pthread_t pthread;
char flag;
event = CreateEvent( NULL TRUE TRUE NULL );
if ((WSAStartup(MAKEWORD(22)&WSData))!=0)
{
printf(“socket initial error!\n“);
return -1;

}


if((client=socket(AF_INETSOCK_STREAMIPPROTO_TCP))==-1)
{
printf(“create socket error!\n“);
WSACleanup();
return -1;
}

printf(“please input the server IP:“);
scanf(“%s“IP);

memset(&server_addr 0 sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(SERVER_PORT);
server_addr.sin_addr.s_addr=inet_addr(IP);

printf(“正在连接,请稍后...\n“);
ret=connect(client(struct sockaddr *)&server_addrsizeof(server_addr));

while(ret==-1)
{

printf(“连接服务器失败,可能原因:服务器未打开.\n“);
        printf(“等待服务器响应...\n“);
        Sleep((DWORD)500); 
ret=connect(client(struct sockaddr *)&server_addrsizeof(server_addr));
}

printf(“连接成功.\n“);

printf(“按任意键进入主界面\n“);

getchar();

while(1)
{
system(“cls“); 
printf(“1.上传文件\n“);
printf(“2.下载文件\n“);
printf(“3.结束程序\n“);
printf(“按p暂停上传按c继续按Esc终止当前文件操作\n“);
printf(“输入相应序号进行所需操作:“);


scanf(“%d“&choice);
printf(“\n\n\n“);

send(client&choice10);
switch(choice)
{
case 1: memset(filename‘\0‘100);
printf(“输入上传文件名:“);
scanf(“%s“filename);

hfile=CreateFile(filenameGENERIC_READFILE_SHARE_READNULLOPEN_EXISTINGFILE_ATTRIBUTE_NORMALNULL); 

if (hfile==INVALID_HANDLE_VALUE) 

                perror(“CreateFile“);
printf(“可能原因:文件不存在请检查文件名\n“);
getchar();
getchar();
break;
}



if(send(clientfilenamesizeof(filename)0)<0)
{

perror(“recv“);
return -1;
}

hThread=(HANDLE)_beginthreadex(NULL0(unsigned int (__stdcall *)(void *))update(LPVOID)(&hfile)NULL&pthread);


/* while(end!=1)
{
flag=getchar();
if(flag == ‘p‘ )
{

printf(“文件已暂停按下c键可使传输继续\n“);
ResetEvent(event);//设为不发信号状态
}
if(flag==‘c‘)
{
printf(“文件传输已继续\n“);
SetEvent(event);
}
}
if(end==1)
{
printf(“上传文件完毕\n“);
}

*/
while(1)
{
if(end==1)
break;
if(kbhit())
{
flag=getch();
if(flag==‘p‘)
{
printf(“文件已暂停按下c键可使传输继续\n“);
ResetEvent(event);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       7571  2010-08-15 14:18  client.c

     文件       6330  2010-08-15 14:30  server.c

----------- ---------  ---------- -----  ----

                13901                    2


评论

共有 条评论