📄 client.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 + -