18,356
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include "resource.h"
#include <CommDlg.h>
#include <WINSOCK2.H> //服务端
#include <stdio.h>
#include <iostream.h>
#pragma comment(lib,"ws2_32.lib") //API链接库文件
#define SIZE 1024*8 //缓冲区大小
#define MAX_LOADSTRING 100
static OPENFILENAME ofn ;
// Global Variables:
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
// Foward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
void PopFileInitialize (HWND hDlg)
{
static TCHAR szFilter[] = TEXT ("文本文件(*.txt)\0*.txt; \0所有文件\0*.*");
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hDlg ;
ofn.hInstance = NULL ;
ofn.lpstrFilter = szFilter ;
ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = 0 ;
ofn.nFilterIndex = 0 ;
ofn.lpstrFile = NULL ; // Set in Open and Close functions
ofn.nMaxFile = MAX_PATH ;
ofn.lpstrFileTitle = NULL ; // Set in Open and Close functions
ofn.nMaxFileTitle = MAX_PATH ;
ofn.lpstrInitialDir = NULL ;
ofn.lpstrTitle = NULL ;
ofn.Flags = 0 ; // Set in Open and Close functions
ofn.nFileOffset = 0 ;
ofn.nFileExtension = 0 ;
ofn.lpstrDefExt = TEXT ("sdkmesh") ;
ofn.lCustData = 0L ;
ofn.lpfnHook = NULL ;
ofn.lpTemplateName = NULL ;
}
BOOL PopFileOpenDlg (HWND hDlg, PTSTR pstrFileName, PTSTR pstrTitleName)
{
ofn.hwndOwner = hDlg;
ofn.lpstrFile = pstrFileName ;
ofn.lpstrFileTitle = pstrTitleName ;
ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
return GetOpenFileName (&ofn) ;
}
SOCKET clientSocket;
SOCKADDR_IN clientsock_in;
char receiveBuf[100]={"0"};
char ip_addr[16]={"127.0.0.1"}; //IP
int len=sizeof(SOCKADDR);
SOCKET serConn;
char sendBuf[50]; //缓冲区预大小
FILE *fp;
int err;
int length=0;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WSADATA wsaData;
int iErrorcode;
iErrorcode=WSAStartup(MAKEWORD(2,2), &wsaData);
if(iErrorcode)
{
cout <<"Winsock can not be init!" ;
WSACleanup();
return -1;
}
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, NULL, (DLGPROC)About);
return 0;
}
// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static TCHAR szFileName[MAX_PATH], szTitleName[MAX_PATH] ;
char path[100]={"0"};
switch (message)
{
case WM_INITDIALOG:
clientSocket=socket(AF_INET,SOCK_STREAM,0); //创建了可识别套接字,流式套接字,tcp/ip协议
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
if (LOWORD(wParam) == IDC_CREATE)
{
//连接服务器
clientsock_in.sin_family=AF_INET; //地址描述
clientsock_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//ip地址等于
clientsock_in.sin_port=htons(5566);
connect(clientSocket,(SOCKADDR*)&clientsock_in,len);//开始连接
// recv(clientSocket,receiveBuf,101,0); //接受成功返回信息,存放到接受buffer
return TRUE;
}
if (LOWORD(wParam) == IDC_SEND)
{
PopFileInitialize (hDlg); //初始化ofn
PopFileOpenDlg(hDlg, szFileName, szTitleName);//打开文件对话框
//i=0;
fp=fopen(szFileName,"rb");
fseek(fp,0L,SEEK_END);
length=ftell(fp);
// printf("待传送文件大小: %d\n",length);
// printf("文件已经打开 等待主机消息......\n");
//得到主机开始传送消息
recv(clientSocket,receiveBuf,101,0);
// printf("%s\n",receiveBuf);
if(strcmp(receiveBuf,"开始传送")==0)
{
//传送文件长度
char sendBuf[20];
ltoa(length,sendBuf,10);
send(clientSocket,sendBuf,21,0);
fseek(fp,0L,SEEK_SET);
//传送文件
long int y=0;
double cent;
char trans[SIZE];
while(!feof(fp))
{
fread(trans,1,SIZE,fp);
y=y+SIZE;
if(y<length)
{
cent=(double)y*100.0/(double)length;
printf("已发送: %4.2f%\n",cent);
send(clientSocket,trans,SIZE+1,0);
}
else
send(clientSocket,trans,length+SIZE-y+1,0);
}
break;
}
return FALSE;
}
}
return 0;
}
#include "stdafx.h"
#include "resource.h"
#include <CommDlg.h>
#include <WINSOCK2.H> //服务端
#include <stdio.h>
#include <iostream.h>
#pragma comment(lib,"ws2_32.lib") //API链接库文件
#define WM_SOCKET WM_USER+0x10 //自定义socket消息
#define SIZE 1024*8 //缓冲区大小
#define MAX_LOADSTRING 100
static OPENFILENAME ofn ;
// Global Variables:
HINSTANCE hInst;
TCHAR szTitle[MAX_LOADSTRING];
TCHAR szWindowClass[MAX_LOADSTRING];
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
void PopFileInitialize (HWND hDlg) //弹出文件对话框
{
static TCHAR szFilter[] = TEXT ("文本文件(*.txt)\0*.txt; \0所有文件\0*.*");
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hDlg ;
ofn.hInstance = NULL ;
ofn.lpstrFilter = szFilter ;
ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = 0 ;
ofn.nFilterIndex = 0 ;
ofn.lpstrFile = NULL ; // Set in Open and Close functions
ofn.nMaxFile = MAX_PATH ;
ofn.lpstrFileTitle = NULL ; // Set in Open and Close functions
ofn.nMaxFileTitle = MAX_PATH ;
ofn.lpstrInitialDir = NULL ;
ofn.lpstrTitle = NULL ;
ofn.Flags = 0 ; // Set in Open and Close functions
ofn.nFileOffset = 0 ;
ofn.nFileExtension = 0 ;
ofn.lpstrDefExt = TEXT ("sdkmesh") ;
ofn.lCustData = 0L ;
ofn.lpfnHook = NULL ;
ofn.lpTemplateName = NULL ;
}
BOOL PopFileOpenDlg (HWND hDlg, PTSTR pstrFileName, PTSTR pstrTitleName)
{
ofn.hwndOwner = hDlg;
ofn.lpstrFile = pstrFileName ;
ofn.lpstrFileTitle = pstrTitleName ;
ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
return GetOpenFileName (&ofn) ;
}
SOCKET serSocket;//创建了可识别套接字,流式套接字,tcp/ip协议
SOCKET serConn;
SOCKADDR_IN addr;
SOCKADDR_IN clientsocket;
int len=sizeof(SOCKADDR);
char sendBuf[50]; //缓冲区预大小
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WSADATA wsaData;
int iErrorcode;
iErrorcode=WSAStartup(MAKEWORD(2,2), &wsaData);
if(iErrorcode)
{
cout <<"Winsock can not be init!" ;
WSACleanup();
return -1;
}
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, NULL, (DLGPROC)About);
return 0;
}
// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static TCHAR szFileName[MAX_PATH], szTitleName[MAX_PATH] ;
switch (message)
{
case WM_INITDIALOG:
serSocket=socket(AF_INET,SOCK_STREAM,0);//创建了可识别套接字,流式套接字,tcp/ip协议
WSAAsyncSelect(serSocket, hDlg,WM_SOCKET,FD_ACCEPT |FD_READ | FD_WRITE| FD_CLOSE); //设置异步方式
return TRUE;
case WM_SOCKET: //自定义消息
switch (WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT: //接收请求事件
{
serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果这里不是accept而是conection的话。。就会不断的监听
}
break;
case FD_READ: //可读事件
{
PopFileInitialize (hDlg); //初始化ofn
PopFileOpenDlg(hDlg, szFileName, szTitleName);//打开文件对话框
sprintf(sendBuf,"Successfully,welcome %s to Leon",inet_ntoa(clientsocket.sin_addr));//找对对应的IP并且将这行字打印到那里
send(serConn,sendBuf,strlen(sendBuf)+1,0);
FILE *fp;
// lable1: printf("客户端已打开\n请输入存放文件地址:\n");
char path[100]={"0"};
int i=0;
//while(path[i]!='\0')
//{
// if(path[i]=='/')
// path[i]='\\';
// i++;
//}
//gets(path);
fp=fopen(szFileName,"rb");
long t1=GetTickCount();//程序段开始前取得系统运行时间(ms)
Sleep(500); //休眠时间
printf("文件已打开 开始文件传输......\n");
//发送开始标志
send(serConn,"开始传送",strlen("开始传送")+1,0);
//得到文件大小
char datalength[20];
long int length=0;
recv(serConn,datalength,21,0);
length=atol(datalength);
printf("得到文件大小: %d\n",length);
//开始传送
double cent=0.0;
char receiveBuf[SIZE];
long int x=0;
while (1)
{
x=x+SIZE;
if(x<length)
{
cent=(double)x*100.0/(double)length; //计算每段buffer占的百分比=8*1024/总文件大小
printf("已接收: %4.2f%\n",cent);
recv(serConn,receiveBuf,SIZE+1,0);
fwrite(receiveBuf,1,SIZE,fp);
}
else
{
recv(serConn,receiveBuf,length+SIZE-x+1,0);
printf("文件接收完毕\n");
fwrite(receiveBuf,1,length+SIZE-x,fp);
long t2=GetTickCount();//程序段结束后取得系统运行时间(ms)
long v;
v=length/(t2-t1);
printf("运行时间:%ld\n",t2-t1);
printf("传输速率:%ld\n",v);
fclose(fp);
break;
}
}
return TRUE;
}
break;
case FD_CLOSE: //关闭连接事件
{
MessageBoxA(NULL, "正常关闭连接", "tip", 0);
}
break;
default:
break;
}
break;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
EndDialog(hDlg, LOWORD(wParam));
closesocket(serSocket);
WSACleanup();
return TRUE;
}
if (LOWORD(wParam) == IDC_CREATE) //创建服务器按钮
{
EnableWindow(GetDlgItem(hDlg,IDC_CREATE),FALSE);
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//ip地址
addr.sin_port=htons(5566);//绑定端口
bind(serSocket,(SOCKADDR*)&addr,len);//Ip与Socket连接
listen(serSocket,3);//套接字描述符,最多的连接数1-5,监听
return TRUE;
}
break;
}
return FALSE;
}
客户端:
#include <WINSOCK2.H> //客户端
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#define SIZE 1024*8
int main()
{
FILE *fp;
int length=0;
//初始化协议栈
WSADATA wsaData;
int err=WSAStartup(MAKEWORD(2,2),&wsaData); //Socket初始化
if (err==0)
printf("已打开套接字\n");
else
{
//进一步绑定套接字
printf("嵌套字未打开!");
return;
}
SOCKET clientSocket;
SOCKADDR_IN clientsock_in;
char receiveBuf[100]={"0"};
char ip_addr[16]={"127.0.0.1"}; //IP
clientSocket=socket(AF_INET,SOCK_STREAM,0); //创建了可识别套接字,流式套接字,tcp/ip协议
printf("请输入主机IP:\n");
scanf("%s",ip_addr);
//连接服务器
clientsock_in.sin_addr.S_un.S_addr=inet_addr(ip_addr);//ip地址等于
clientsock_in.sin_family=AF_INET; //地址描述
clientsock_in.sin_port=htons(6000);
connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR));//开始连接
recv(clientSocket,receiveBuf,101,0); //接受成功返回信息,存放到接受buffer
printf("%s\n",receiveBuf);
char path[100]={"0"};
gets(path);
int i=0;
do
{
printf("请输入文件地址:\n");
gets(path);
while(path[i]!='\0')
{
if(path[i]=='/')
path[i]='\\';
i++;
}
i=0;
if((fp=fopen(path,"rb"))==NULL)
{
i=1;
printf("文件未打开\n");
}
}while(i);
fseek(fp,0L,SEEK_END);
length=ftell(fp);
printf("待传送文件大小: %d\n",length);
printf("文件已经打开 等待主机消息......\n");
//得到主机开始传送消息
recv(clientSocket,receiveBuf,101,0);
printf("%s\n",receiveBuf);
if(strcmp(receiveBuf,"开始传送")==0)
{
//传送文件长度
char sendBuf[20];
ltoa(length,sendBuf,10);
send(clientSocket,sendBuf,21,0);
fseek(fp,0L,SEEK_SET);
//传送文件
long int y=0;
double cent;
char trans[SIZE];
while(!feof(fp))
{
fread(trans,1,SIZE,fp);
y=y+SIZE;
if(y<length)
{
cent=(double)y*100.0/(double)length;
printf("已发送: %4.2f%\n",cent);
send(clientSocket,trans,SIZE+1,0);
}
else
{
send(clientSocket,trans,length+SIZE-y+1,0);
closesocket(clientSocket);
WSACleanup();
}
}
fclose(fp);
}
printf("文件发送完毕\n");
system("pause");
}
#include <WINSOCK2.H> //服务端
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib") //API链接库文件
#define SIZE 1024*8 //缓冲区大小
void main()
{
//初始化协议栈
WSADATA wsaData;
int err=WSAStartup(MAKEWORD(2,2),&wsaData); //Socket初始化
SOCKET serSocket=socket(AF_INET,SOCK_STREAM,0);//创建了可识别套接字,流式套接字,tcp/ip协议
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址
addr.sin_port=htons(6000);//绑定端口
bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//Ip与Socket连接
listen(serSocket,5);//套接字描述符,最多的连接数1-5,监听
SOCKADDR_IN clientsocket;
int len=sizeof(SOCKADDR);
SOCKET serConn;
char sendBuf[50]; //缓冲区预大小
serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果这里不是accept而是conection的话。。就会不断的监听
sprintf(sendBuf,"Successfully,welcome %s to Leon",inet_ntoa(clientsocket.sin_addr));//找对对应的IP并且将这行字打印到那里
send(serConn,sendBuf,strlen(sendBuf)+1,0);
FILE *fp;
lable1: printf("客户端已打开\n请输入存放文件地址:\n");
char path[100]={"0"};
int i=0;
while(path[i]!='\0')
{
if(path[i]=='/')
path[i]='\\';
i++;
}
gets(path);
if((fp=fopen(path,"wb"))==NULL)
{
printf("文件未打开\n");
goto lable1;
}
else
{
long t1=GetTickCount();//程序段开始前取得系统运行时间(ms)
Sleep(500); //休眠时间
printf("文件已打开 开始文件传输......\n");
//发送开始标志
send(serConn,"开始传送",strlen("开始传送")+1,0);
//得到文件大小
char datalength[20];
long int length=0;
recv(serConn,datalength,21,0);
length=atol(datalength);
printf("得到文件大小: %d\n",length);
//开始传送
double cent=0.0;
char receiveBuf[SIZE];
long int x=0;
while (1)
{
x=x+SIZE;
if(x<length)
{
cent=(double)x*100.0/(double)length; //计算每段buffer占的百分比=8*1024/总文件大小
printf("已接收: %4.2f%\n",cent);
recv(serConn,receiveBuf,SIZE+1,0);
fwrite(receiveBuf,1,SIZE,fp);
}
else
{
recv(serConn,receiveBuf,length+SIZE-x+1,0);
printf("文件接收完毕\n");
fwrite(receiveBuf,1,length+SIZE-x,fp);
long t2=GetTickCount();//程序段结束后取得系统运行时间(ms)
long v;
v=length/(t2-t1);
printf("运行时间:%ld\n",t2-t1);
printf("传输速率:%ld\n",v);
fclose(fp);
break;
}
}
}
closesocket(serConn);//关闭
WSACleanup();//释放资源的操作
system("pause");
}
--------客户端
#include <WINSOCK2.H> //客户端
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#define SIZE 1024*8
int main()
{
FILE *fp;
int length=0;
//初始化协议栈
WSADATA wsaData;
int err=WSAStartup(MAKEWORD(2,2),&wsaData); //Socket初始化
SOCKET clientSocket;
SOCKADDR_IN clientsock_in;
char receiveBuf[100]={"0"};
char ip_addr[16]={"127.0.0.1"}; //IP
clientSocket=socket(AF_INET,SOCK_STREAM,0); //创建了可识别套接字,流式套接字,tcp/ip协议
printf("请输入主机IP:\n");
scanf("%s",ip_addr);
//连接服务器
clientsock_in.sin_addr.S_un.S_addr=inet_addr(ip_addr);//ip地址等于
clientsock_in.sin_family=AF_INET; //地址描述
clientsock_in.sin_port=htons(6000);
connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR));//开始连接
recv(clientSocket,receiveBuf,101,0); //接受成功返回信息,存放到接受buffer
printf("%s\n",receiveBuf);
char path[100]={"0"};
gets(path);
int i=0;
do
{
printf("请输入文件地址:\n");
gets(path);
while(path[i]!='\0')
{
if(path[i]=='/')
path[i]='\\';
i++;
}
i=0;
if((fp=fopen(path,"rb"))==NULL)
{
i=1;
printf("文件未打开\n");
}
}while(i);
fseek(fp,0L,SEEK_END);
length=ftell(fp);
printf("待传送文件大小: %d\n",length);
printf("文件已经打开 等待主机消息......\n");
//得到主机开始传送消息
recv(clientSocket,receiveBuf,101,0);
printf("%s\n",receiveBuf);
if(strcmp(receiveBuf,"开始传送")==0)
{
//传送文件长度
char sendBuf[20];
ltoa(length,sendBuf,10);
send(clientSocket,sendBuf,21,0);
fseek(fp,0L,SEEK_SET);
//传送文件
long int y=0;
double cent;
char trans[SIZE];
while(!feof(fp))
{
fread(trans,1,SIZE,fp);
y=y+SIZE;
if(y<length)
{
cent=(double)y*100.0/(double)length;
printf("已发送: %4.2f%\n",cent);
send(clientSocket,trans,SIZE+1,0);
}
else
{
send(clientSocket,trans,length+SIZE-y+1,0);
closesocket(clientSocket);
WSACleanup();
}
}
fclose(fp);
}
printf("文件发送完毕\n");
system("pause");
}