📄 scd.c
字号:
if(tokenPtr != NULL)
{
printf("It will be send to %s\n",tokenPtr);
if(one_send(tokenPtr, cli_name, recvbuf)!=1) //发送
{
one_send(cli_name,cli_name,errsendbuf); //发送失败,返回错误信息给源信息发送者
}
return 4;
}
else
{
send(connectfd,m_buf,strlen(m_buf),0); //发送失败,返回错误信息给源信息发送者
return 0;
}
}
else if(!strcmp(tokenPtr,"/nick"))
{
tokenPtr=(char *)strtok(NULL," ");
if(tokenPtr != NULL)
{
bzero(namechange,sizeof(namechange));
strcat(namechange,"I have changed my name to be ");
strcat(namechange,tokenPtr);
namechange[strlen(namechange)]='\0';
if(changeNickName(cli_name,tokenPtr,connectfd)==1) //change success
{
all_send(cli_name,namechange); //把改名信息群发
}
bzero(namechange,sizeof(namechange));
return 3;
}
else
{
//send(connectfd,cmderrbuf,strlen(cmderrbuf),0); //send the error of command
one_send(cli_name,cli_name,cmderrbuf);
return 0;
}
}
else if(!strcmp(tokenPtr,"/who"))
{
sendcli_list(connectfd); //发送在线用户列表
return 5;
}
tokenPtr=(char *)strtok(NULL," ");
}
return 0;
}
void all_send(char cli_name[], char msg[])
{
struct clientsInfo* pcli;
char sendbuf[MAXDATASIZE];
pcli = clients;
while(pcli != NULL) // send this message to all of the clients
{
strcat(sendbuf,cli_name);
strcat(sendbuf," > ");
strcat(sendbuf,msg);
//send(pcli->connectfd,sendbuf,strlen(sendbuf),0);
sendMsg(pcli->connectfd, sendbuf, pcli->passwd);
pcli = pcli->next;
bzero(sendbuf,sizeof(sendbuf));
}
}
void decrypt(char recvbuf[], char cli_name[])
{
struct clientsInfo* pcli1;
int i;
if(clientsCount > 0)
{
pcli1 = clients;
while(pcli1 != NULL) // tranverse the list to find to client
{
if(!strcmp(pcli1->nickname,cli_name)) //find by the client name
{
if(strlen(pcli1->passwd)==0) // no need to decrypt
{
printf("no password now\n");
}
else // we should decrypt
{
mydecrypt(recvbuf,pcli1->passwd);
}
break;
}
pcli1=pcli1->next;
}
}
}
int one_send(char* tokenPtr, char cli_name[], char msg[])
{
char sendbuf[MAXDATASIZE];
struct clientsInfo* pcli1;
int confd;
bzero(sendbuf,sizeof(sendbuf));
strcat(sendbuf,cli_name);
strcat(sendbuf," > ");
strcat(sendbuf,msg);
if(clientsCount > 0)
{
pcli1 = clients;
while(pcli1 != NULL) // tranverse the list to find to nickname to change
{
if(!strcmp(pcli1->nickname,tokenPtr)) //find it
{
confd=pcli1->connectfd;
//send(confd,sendbuf,strlen(sendbuf),0);
sendMsg(confd, sendbuf, pcli1->passwd);
return 1;
}
pcli1=pcli1->next;
}
}
return 0;
}
void sendcli_list(int connectfd)
{
struct clientsInfo* pcli1;
char sendbuf[MAXDATASIZE];
char pwd[PASSWD];
if(clientsCount > 0)
{
pcli1 = clients;
while(pcli1 != NULL)
{
if( pcli1->connectfd==connectfd)
{
strcpy(pwd, pcli1->passwd);
}
strcat(sendbuf,pcli1->nickname);
strcat(sendbuf,"@");
strcat(sendbuf,pcli1->hostname);
strcat(sendbuf,"\n");
pcli1=pcli1->next;
}
}
//send(connectfd,sendbuf,strlen(sendbuf),0);
sendMsg(connectfd, sendbuf, pwd);
bzero(sendbuf,sizeof(sendbuf));
bzero(pwd,sizeof(pwd));
}
int changeNickName(char cli_name[], char newname[],int connectfd)
{
struct clientsInfo* pcli1;
if(clientsCount > 0)
{
pcli1 = clients;
while(pcli1 != NULL) // tranverse the list
{
if(!strcmp(pcli1->nickname, newname)) // to make sure that newname doesn't exits in the list
{
//send(connectfd,changerrbuf,strlen(changerrbuf),0);
one_send(cli_name,cli_name,changerrbuf);
return 0;
}
pcli1 = pcli1->next;
}
pcli1 = clients;
while(pcli1 != NULL) // tranverse the list to find to nickname to change
{
if(!strcmp(pcli1->nickname,cli_name)) //find by the original name and replace it
{
strcpy(cli_name, newname);
strcpy(pcli1->nickname, newname);
return 1;
}
pcli1=pcli1->next;
}
}
return 0;
}
int changePasswd(char cli_name[], char passwd[],int connectfd)
{
struct clientsInfo* pcli1;
if(clientsCount > 0)
{
pcli1 = clients;
while(pcli1 != NULL) // tranverse the list to find to client
{
if(!strcmp(pcli1->nickname,cli_name)) //find by the client name and change its password
{
strcpy(pcli1->passwd, passwd);
//printf("password is :%s\n",passwd);
return 1;
}
pcli1=pcli1->next;
}
}
return 0;
}
void getAllCli_Name()
{
struct clientsInfo* pcli1;
if(clientsCount > 0)
{
pcli1 = clients;
while(pcli1 != NULL)
{
//printf("%s--%s\t",pcli1->nickname,pcli1->hostname);
//printf("\n");
pcli1=pcli1->next;
}
}
}
int checkParam(int argc,char* argv[],int* isSecure,int* backlog,int* port)
{
int i;
if(argc>6)
{
printf("Usage: %s [-i] [-m max] [-p port]\n",argv[0]);
exit(1);
}
else if(argc>1)
{
for(i=1;i<argc;i++)
{
if(!strcmp(argv[i],"-i"))
{
*isSecure=0;
}
else if(!strcmp(argv[i],"-m"))
{
if(argc>i+1)
{
*backlog=atoi(argv[i+1]);
if(*backlog<=0)
{
*backlog=0;
}
}
else
{
printf("Usage: %s [-i] [-m max] [-p port]\n",argv[0]);
return 0;
}
}
else if(!strcmp(argv[i],"-p"))
{
if(argc>i+1)
{
*port=atoi(argv[i+1]);
if(*port<=0)
{
*port=0;
}
}
else
{
printf("Usage: %s [-i] [-m max] [-p port]\n",argv[0]);
return 0;
}
}
}
}
return 1;
}
void ReadHelpFile(char cmdbuf[])
{
int i;
char c;
FILE* cfPtr;
if((cfPtr=fopen("Help.dat","r"))==NULL)
{
printf("read Help file error");
}
else
{
i=0;
while((c=fgetc(cfPtr))!=EOF && i<MAXDATASIZE)
{
cmdbuf[i]=c;
i++;
}
fclose(cfPtr);
}
}
int sendMsg(int sockfd, char sendline[], char passwd[])
{
if(strlen(passwd)>=0)
{
myencrypt(sendline, passwd);
}
send(sockfd,sendline,strlen(sendline),0);
}
void myencrypt(char sendbuf[], char passwd[])
{
int i;
int buflength;
int pwdlength;
buflength = strlen(sendbuf);
pwdlength = strlen(passwd);
//printf("\n--%d--%s--\n",pwdlength, passwd);
for( i=0; i<buflength ; i++)
{
sendbuf[i]=sendbuf[i]+passwd[i%pwdlength];
}
}
void mydecrypt(char sendbuf[], char passwd[])
{
int i;
int buflength;
int pwdlength;
buflength = strlen(sendbuf);
pwdlength = strlen(passwd);
//printf("\n--%d--%s--\n",pwdlength, passwd);
for( i=0; i<buflength ; i++)
{
sendbuf[i]=sendbuf[i]-passwd[i%pwdlength];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -