⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.cpp

📁 c语言实现的文件管理系统!其中包含创建
💻 CPP
字号:
//client.cpp
#include<iostream.h>
#include<winsock.h>
#include <process.h>

DWORD WINAPI ThreadFunc(LPVOID pParam);//客户端的socket接收线程函数
char info[255];                  //包含待发送数据的缓冲区。
#define DEFAUOT_PORT 4000
void Init(void);     //初始化界面函数 

/****************************主函数***************************/ 
void main() 
{   
   Init();                 //初始化界面
   WORD wVors_onRequested=MAKEWORD(2,2);     //表示使用WINSOCK2版本
   WSADATA wsaData;                          //建立一个WSADATA结构
   WSAStartup(wVors_onRequested,&wsaData);   // 该函数是连接应用程序与winsock.dll的第一个调用
   SOCKET sClntSock;
   sockaddr_in addr; 
   /*struct  sockaddr_in {
     short  int  sin_family;         指代协议族,在socket编程中只能是AF_INET                   
     unsigned  short  int  sin_port; sin_port存储端口号(使用网络字节顺序)     
     struct  in_addr  sin_addr;      sin_addr存储IP地址,使用in_addr这个数据结构       
     unsigned  char  sin_zero[8];    sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节    
    };*/
   sockaddr_in Servaddr;
   int nSockErr;
   sClntSock=socket(AF_INET,SOCK_STREAM,0);//AF_INFE表示TCP/IP族,SOCK_STREAM 流式套接字,IPPROTO_TCP   TCP协议 用于流式套接字 

   long arg=1;
   
   addr.sin_family=AF_INET;         //IP地址和端口来连接服务器
   addr.sin_port=0;
   addr.sin_addr.s_addr=htonl(INADDR_ANY);
   if(bind(sClntSock,(LPSOCKADDR)&addr,sizeof(addr))==SOCKET_ERROR)
   {
	   nSockErr=WSAGetLastError();
   }
   Servaddr.sin_family=AF_INET;
   Servaddr.sin_port=htons(DEFAUOT_PORT);
   cout<<"输入服务器地址:\n";
   char add_ip[50];
   cin>>add_ip;
   Servaddr.sin_addr.s_addr=inet_addr(add_ip);    ////将要绑定的本地IP地址 
   if (connect(sClntSock,(const sockaddr*)(&Servaddr),sizeof(Servaddr))==SOCKET_ERROR)
   {
	   nSockErr=WSAGetLastError();
   }
   else cout<<"****************连接成功****************"<<endl;
   
   CreateThread(NULL,0,ThreadFunc,&sClntSock,0,NULL);
   cout<<">";
   cin.getline(info,255);   //接受一个字符串,可以接收空格并输出

   while(strcmp(info,"0"))   //比较字符串s1和s2。
   {
	   send(sClntSock,info,255,0);
       cout<<">";
       cin.getline(info,255);
   }
}

/****************************客户端的socket接收线程函数***************************/ 
DWORD WINAPI ThreadFunc(LPVOID pParam)
{
	SOCKET *S=(SOCKET*)pParam;          //一个标识已连接套接口的描述字
    char in[255];                        //用于接收数据的缓冲区
    while (strcmp(info,"0"))
	{
		if(recv(*S,in,255,0)!=SOCKET_ERROR)            //从一个套接口接收数据
		{
			cout<<in<<endl;
            cout.flush();
		}
        else
		{
			cout<<"******************服务端关闭*****************"<<endl;
            exit(0);
		}
	}
    return 0;
}
/****************************初始化界面函数***************************/ 
void Init(void)                    
{
   system("color 64");
   cout<<"                           简单远程文件管理系统"<<endl;
   cout<<"                                                 "<<endl;
   cout<<"功能说明\n   "<<endl;
   cout<<"   1-创建目录  2-删除目录  3-创建文件  4-删除文件"<<endl;
   cout<<"   5-写文件    6-读取文件  7-设置属性  8-追加文件"<<endl;
   cout<<"   9-获取文件时间         10-获取文件大小  "<<endl;
   cout<<"  11-获取文件属性         12-查找文件夹   "<<endl;
   cout<<"  13-设置默认文件夹       14-移动文件  0-退出  "<<endl;
   cout<<"                                                 "<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -