-
大小: 4KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-05
- 語言: 其他
- 標(biāo)簽: TCP??C/S??網(wǎng)絡(luò)??
資源簡介
TCP協(xié)議實現(xiàn)客戶端/服務(wù)器,能上傳下載文件,客戶端能顯示進(jìn)度,能隨時終止上傳下載

代碼片段和文件信息
#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;
/*進(jìn)行下載*/
unsigned?int?_stdcall?download(void?*p);
/*進(jìn)行上傳*/
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(“連接服務(wù)器失敗,可能原因:服務(wù)器未打開.\n“);
????????printf(“等待服務(wù)器響應(yīng)...\n“);
????????Sleep((DWORD)500);?
ret=connect(client(struct?sockaddr?*)&server_addrsizeof(server_addr));
}
printf(“連接成功.\n“);
printf(“按任意鍵進(jìn)入主界面\n“);
getchar();
while(1)
{
system(“cls“);?
printf(“1.上傳文件\n“);
printf(“2.下載文件\n“);
printf(“3.結(jié)束程序\n“);
printf(“按p暫停上傳按c繼續(xù)按Esc終止當(dāng)前文件操作\n“);
printf(“輸入相應(yīng)序號進(jìn)行所需操作:“);
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鍵可使傳輸繼續(xù)\n“);
ResetEvent(event);//設(shè)為不發(fā)信號狀態(tài)
}
if(flag==‘c‘)
{
printf(“文件傳輸已繼續(xù)\n“);
SetEvent(event);
}
}
if(end==1)
{
printf(“上傳文件完畢\n“);
}
*/
while(1)
{
if(end==1)
break;
if(kbhit())
{
flag=getch();
if(flag==‘p‘)
{
printf(“文件已暫停按下c鍵可使傳輸繼續(xù)\n“);
ResetEvent(event);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????7571??2010-08-15?14:18??client.c
?????文件???????6330??2010-08-15?14:30??server.c
-----------?---------??----------?-----??----
????????????????13901????????????????????2
評論
共有 條評論