server_main程序
#include<string.h>
#include <stdio.h>
#include <winsock.h>
#define WSVERS MAKEWORD(2, 0)
SOCKET passiveUDP(const char *);
void errexit(const char *, …);
char recvbuf[4096];
char sendbuf[4096];
char *service = “2009”;
struct sockaddr_in fsin;
SOCKET sock;
int total=0; //统计在线用户
struct chatter //在线用户
{
char username[10];
struct sockaddr_in save_sin;
// int place;
} chatter_online[10];
struct user_info //注册用户
{
char username[10];
char passwd[10];
}user[10];
//===send_error
void send_error(int error_seq)
{
printf(“send_error is exacuting!\n”);
memset(&chatter_online[error_seq],’\0’,sizeof(chatter_online[error_seq]));
while(error_seq<=total)
{
memcpy(&chatter_online[error_seq],&chatter_online[error_seq+1],sizeof(chatter_online[error_seq+1]));
error_seq++;
}
total–;
}
//-------------------------------------send_error end------------------------------
//apply
void apply() //申请函数
{
printf(“0\n”);
printf("%s\n",recvbuf);
FILE *fp1;
int i=0,j=1,k=0;
struct user_info test_user;
memset(test_user.username,'\0',sizeof(test_user.username));
memset(test_user.passwd,'\0',sizeof(test_user.passwd));
if((fp1=fopen("E:\\ltcx\\server_main\\","r"))==NULL)
{
printf("存储文件不存在!");
return ;
}
printf(“1\n”);
while(recvbuf[j]!=’|’) //将注册名存入recvbuf中
{
test_user.username[j-1]=recvbuf[j];
j++;
}
// test_user.username[j]=’\0’;
while(recvbuf[j+1]!='\0') //存放注册密码
{
test_user.passwd[k]=recvbuf[j+1];
k++;
j++;
}
// test_user.passwd[k]=’\0’;
printf(“2\n”);
while(!feof(fp1))
{
fread(&user[i],sizeof(struct user_info),1,fp1);
printf("-->if\n");
if(strcmp(test_user.username,user[i].username)==0)
{
memset(recvbuf,'\0',sizeof(recvbuf));
recvbuf[0]='0';
printf("-->=0sendto\n");
(void)sendto(sock, recvbuf, strlen(recvbuf), 0,(struct sockaddr *)&fsin, sizeof(fsin));
memset(recvbuf,'\0',sizeof(recvbuf));
printf("由于用户名已存在,故拒绝该申请!\n\n");
return ;
}
i++;
}
fclose(fp1);
printf(“3\n”);
fp1=fopen(“E:\ltcx\server_main\”,“a”);
if(fwrite(&test_user,sizeof(struct user_info),1,fp1)==1)
{
memset(recvbuf,’\0’,sizeof(recvbuf));
recvbuf[0]=‘1’;
printf(“4\n”);
(void) sendto(sock, recvbuf, strlen(recvbuf), 0,(struct sockaddr *)&fsin, sizeof(fsin));
printf(“5\n”);
memset(recvbuf,’\0’,sizeof(recvbuf));
printf(“一位新用户注册成功!\n\n”);
fclose(fp1);
return ;
}
else
{
memset(recvbuf,’\0’,sizeof(recvbuf));
recvbuf[0]=‘2’;
(void) sendto(sock, recvbuf, strlen(recvbuf), 0,(struct sockaddr *)&fsin, sizeof(fsin));
memset(recvbuf,’\0’,sizeof(recvbuf));
printf(“因写入错误,导致该用户申请失败!\n\n”);
fclose(fp1);
return ;
}
}
//-------------------------------------------apply end-------------------------------------------------------
//login=========
void login() //登录验证函数
{
int j=1,k=0,m=1,i=0;
int judge=total;
int judge_online=0;////////////////////////////////////
FILE *fp;
char temp_passwd[10];
char temp_name[10];
memset(temp_name,'\0',sizeof(temp_name));
memset(temp_passwd,'\0',sizeof(temp_passwd));
while(recvbuf[j]!='|') //将注册名存入recvbuf中
{
temp_name[j-1]=recvbuf[j];
j++;
}
while(recvbuf[j]!='\0')
{
temp_passwd[k]=recvbuf[j+1];
k++;j++;
}
while(!feof(fp))
{
fread(&user[i],sizeof(struct user_info),1,fp);
if(strcmp(temp_name,user[i].username)==0 && strcmp(temp_passwd,user[i].passwd)==0)
{
while(judge_online<=total) //判断要登录的用户是否已经在线
{
if(strcmp(temp_name,chatter_online[judge_online].username)==0)
{
memset(recvbuf,'\0',sizeof(recvbuf));
strcpy(recvbuf,"该用户已经在线,请下线后,再尝试重新登录!");
(void) sendto(sock, recvbuf, strlen(recvbuf), 0,(struct sockaddr *)&fsin, sizeof(fsin));
return ;
}
judge_online++;
}
// --------------------------
memset(chatter_online[total].username,'\0',sizeof(chatter_online[total].username));
while(recvbuf[m]!='|') //登录成功后成为在线用户,将其信息保存到chatter结构体中
{
chatter_online[total].username[m-1]=recvbuf[m];
m++;
}
memcpy(&chatter_online[total].save_sin, &fsin,sizeof(struct sockaddr_in));
memset(recvbuf,'\0',sizeof(recvbuf));
recvbuf[0]='1';
(void) sendto(sock, recvbuf, strlen(recvbuf), 0,(struct sockaddr *)&chatter_online[total].save_sin, sizeof(chatter_online[total].save_sin));
printf("%s成功进入聊天室!\n\n",chatter_online[total].username);
total++;
printf("\n=======>Now total is %d\n",total);
fclose(fp);
return ;
}
i++;
}
if(judge==total)
{
memset(recvbuf,'\0',sizeof(recvbuf));
strcpy(recvbuf,"用户名或密码错误!");
(void) sendto(sock, recvbuf, strlen(recvbuf), 0,(struct sockaddr *)&fsin, sizeof(fsin));
fclose(fp);
return ;
}
}
//----------------------------------------------login end-----------------------------------------------------
//=chat================
void chat()
{
char temp_name[10];
int i=0,j=0;
int m;
memset(temp_name,'\0',sizeof(temp_name));
while(recvbuf[i]!=':')
{
temp_name[i]=recvbuf[i];
i++;
}
while(j<total)
{
if(strcmp(temp_name,chatter_online[j].username)!=0)
{
m=sendto(sock, recvbuf, strlen(recvbuf), 0,(struct sockaddr *)&chatter_online[j].save_sin, sizeof(chatter_online[j].save_sin));
printf("\nm=%d",m);
if(m==SOCKET_ERROR || m<0)
{
send_error(i);
j–;
}
}
j++;
}
printf("\n%s发言成功!\n",temp_name);
return ;
}
//--------------------------------------------chat end------------------------------------------------------------
//operation===============
void list()
{
int i=0;
int length;
printf(“list->%s\n”,recvbuf);
memset(sendbuf,’\0’,sizeof(sendbuf));
while(i<total)
{
length=strlen(chatter_online[i].username);
printf(“sendbuf_length:%d\n”,strlen(sendbuf));
strncpy(&sendbuf[strlen(sendbuf)], chatter_online[i].username,length);
sendbuf[strlen(sendbuf)]=’|’;
i++;
}
printf(“list-send->%s\n”,sendbuf);
(void) sendto(sock, sendbuf, sizeof(recvbuf), 0,(struct sockaddr *)&fsin, sizeof(fsin));
}
void changecode()
{
char code_name[10];
char old_code[10];
char new_code[10];
int i=2,j=0;
int m=0,n=0,t=0;
FILE *fp1;
if((fp1=fopen(“E:\ltcx\server_main\”,“r”))==NULL)
{
printf(“存储文件不存在!”);
fclose(fp1);
return ;
}
memset(code_name,’\0’,sizeof(code_name));
memset(old_code,’\0’,sizeof(old_code));
memset(new_code,’\0’,sizeof(new_code));
printf(“client->server:%s\n”,recvbuf);
while(recvbuf[i]!=’%’) //存旧密码
{
old_code[j]=recvbuf[i];
j++;
i++;
}
printf(“old_code->%s\n”,old_code);
j=0;
while(recvbuf[i+1]!=’*’) //存新密码
{
new_code[j]=recvbuf[i+1];
i++;
j++;
}
printf(“new_code->%s\n”,new_code);
j=0;
while(recvbuf[i+2]!=’\0’) //存用户名
{
code_name[j]=recvbuf[i+2];
i++;
j++;
}
printf(“code_name->%s\n”,code_name);
//==
while(!feof(fp1)) //将库中信息读到结构体中
{
fread(&user[m],sizeof(struct user_info),1,fp1);
m++;
}
fclose(fp1);
printf(“now m1=%d\n”,m);
fp1=fopen(“E:\ltcx\server_main\”,“w”) ;
while(n<m) //进行匹配修改
{
if(strcmp(code_name,user[n].username)==0)
{
if(strcmp(old_code,user[n].passwd)==0)
{
memset(user[n].passwd,’\0’,sizeof(user[n].passwd));
strcpy(user[n].passwd,new_code);
while(t<m)
{
fwrite(&user[t],sizeof(struct user_info),1,fp1);
t++;
printf(“存盘成功!\n”);
}
fclose(fp1);
printf(“存盘完成!\n”);
memset(recvbuf,’\0’,sizeof(recvbuf));
memcpy(recvbuf,“密码修改成功!”,strlen(“密码修改成功!”));
(void) sendto(sock, recvbuf, strlen(recvbuf), 0,(struct sockaddr *)&fsin, sizeof(fsin));
return ;
}
else
{
memset(recvbuf,’\0’,sizeof(recvbuf));
memcpy(recvbuf,“旧密码不正确!”,strlen(“旧密码不正确!”));
(void) sendto(sock, recvbuf, strlen(recvbuf), 0,(struct sockaddr *)&fsin, sizeof(fsin));
return ;
}
}
n++;
}
}
void operation()
{
printf(“op->%s\n”,recvbuf);
switch(recvbuf[1])
{
case ‘#’: list(); break;
case ‘$’: changecode(); break;
}
}
void reset()
{
int old_total=total;
int i=0;
int total=0;
memset(chatter_online[old_total].username,’\0’,sizeof(chatter_online[old_total].username));
memset(chatter_online[total].username,’\0’,sizeof(chatter_online[total].username));
memcpy(&chatter_online[total].save_sin, &fsin,sizeof(struct sockaddr_in));
total++;
printf("\nreset all user’s process is %d\n",total);
}
//--------------------------------------------operation end--------------------------------------------------------
void main()
{
int alen;
int place1=0;
int len=0;
loop: WSADATA wsadata;
if (WSAStartup(WSVERS, &wsadata)) errexit(“WSAStartup failed\n”);
sock = passiveUDP(service);
printf("server has started!\n");
memset(recvbuf,'\0',sizeof(recvbuf));
memset(sendbuf,'\0',sizeof(sendbuf));
alen = sizeof(fsin);
while(1)
{
memset(recvbuf,'\0',sizeof(recvbuf));
memset(sendbuf,'\0',sizeof(sendbuf));
if ((len=recvfrom(sock, recvbuf, sizeof(recvbuf), 0, (struct sockaddr *)&fsin, &alen))==SOCKET_ERROR)
{ printf("-->recvfrom client error!\n");
printf("\nERRor=%d\n",WSAGetLastError());
for(int w=0;w<total;w++)
sendto(sock, "@+)", strlen("@+)"), 0,(struct sockaddr *)&chatter_online[w].save_sin, sizeof(chatter_online[w].save_sin));
closesocket(sock);
WSACleanup();
goto loop;
}
printf("main-->buf->:%s\n",recvbuf);
switch(recvbuf[0])
{
case '&': apply(); break;
case '@': login(); break;
case '$': operation(); break;
case '^': reset(); break;
default: chat(); break;
}
}
closesocket(sock);
WSACleanup();
}
client程序
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include <conio.h>
#include<process.h>
#include<winsock.h>
void errexit(const char *,…);
SOCKET connectUDP(const char *,const char *);
#define LINELEN 128
#define WSVERS MAKEWORD(2,0)
#define STKSIZE 16536
char save_name[10]; //不是以’\0’结尾的
//char *host=“172.16.0.12”;
char *host=“localhost”;
char *service=“2009”;
char cmdbuf[4096];
SOCKET s,r;
//cmd=
void list()
{
void chat();
int length;
length=strlen(cmdbuf);
if(send(r,cmdbuf,length,0)==SOCKET_ERROR)
{
printf("\n --->发送请求时发生错误!\n\n");
memset(cmdbuf,'\0',sizeof(cmdbuf)); //┘└ ┘┘┐
printf("\n ");
system("pause");
chat();
}
memset(cmdbuf,'\0',sizeof(cmdbuf));
if(recv(r,cmdbuf,sizeof(cmdbuf),0)==SOCKET_ERROR)
{
printf("\n --->接收消息发生错误!\n\n");
memset(cmdbuf,'\0',sizeof(cmdbuf)); //┘└ ┘┘┐
printf("\n ");
system("pause");
chat();
}
printf("\n 当前在线用户:\n\n");
printf(" ┌─────────────────────────────┐\n");
printf(" │ │\n");
printf(" %s \n",cmdbuf);
printf(" │ │\n");
printf(" └─────────────────────────────┘\n");
memset(cmdbuf,'\0',sizeof(cmdbuf)); //┘└ ┘┘┐
printf("\n ");
system("pause");
chat();
}
void changecode()
{
void chat();
int length;
int name_length;
int i=0,j=0;
printf("\n 旧密码:");
scanf("%s",&cmdbuf[2]);
cmdbuf[strlen(cmdbuf)]='%'; //sendbuf[strlen(sendbuf)]始终是下一个字符
printf("\n\n 新密码:");
scanf("%s",&cmdbuf[strlen(cmdbuf)]);
cmdbuf[strlen(cmdbuf)]='*';
i=strlen(cmdbuf);
name_length=strlen(save_name);
while(j<name_length) //将用户名放置sendbuf首部
{
cmdbuf[i+j]=save_name[j];
j++;
}
length=strlen(cmdbuf);
// printf(“cmdbuf–>%s\n”,cmdbuf);
if(send(r,cmdbuf,length,0)==SOCKET_ERROR)
{
printf("\n\n —>发送请求时发生错误!\n");
memset(cmdbuf,’\0’,sizeof(cmdbuf));
printf("\n ");
system(“pause”);
chat();
}
memset(cmdbuf,'\0',sizeof(cmdbuf));
if(recv(r,cmdbuf,sizeof(cmdbuf),0)==SOCKET_ERROR)
{
printf("\n\n 返回状态时,客户端连接发生错误。。。\n");
memset(cmdbuf,'\0',sizeof(cmdbuf));
printf("\n ");
system("pause");
chat();
}
printf("\n %s\n\n",cmdbuf);
memset(cmdbuf,'\0',sizeof(cmdbuf));
printf("\n ");
system("pause");
chat();
}
void comand()
{
void chat();
char sdf[10];
int i=0;
memset(sdf,’\0’,sizeof(sdf));
system(“cls”);
printf("\n ★ 控 ● 制 ● 台 ★ \n\n");
printf("\n 〓※〓※〓※〓※〓※〓※〓※〓※〓※〓※〓※〓※〓※〓※〓※〓※〓※〓 \n\n");
printf("\n 命令说明: \n\n");
printf(" ┌┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄┐\n");
printf(" ┆ ┆ \n");
printf(" ┆1.list—>显示所以在线用户 2.chcd—>修改当前用户密码 ┆\n");
printf(" ┆ ┆\n");
printf(" ┆3.back—>返回聊天界面 4.endchat—>退出聊天程序 ┆\n");
printf(" └┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄ ┄┘\n");
memset(cmdbuf,'\0',sizeof(cmdbuf));
printf("\n sys:\\>");
cmdbuf[0]='$';
scanf("%s",sdf);
if(strcmp(sdf,"list")==0) { i++; cmdbuf[1]='#'; list(); }
if(strcmp(sdf,"chcd")==0) { i++; cmdbuf[1]='$'; changecode(); }
if(strcmp(sdf,"endchat")==0) { i++; printf(" \n "); exit(1); }
if(strcmp(sdf,"back")==0) { i++; system("cls"); chat(); return ; }
if(i==0)
{
printf(" \' %s \' 不是内部处理命令或批处理文件\n",sdf);
memset(cmdbuf,'\0',sizeof(cmdbuf));
printf("\n ");
system("pause");
chat();
}
}
//------------------------------------end cmd---------------------------------
//apply
int apply()
{
void display();
system("cls");
printf("\n\n\t\t※〓¤※〓¤--欢-迎-注-册-聊-天-账-号--¤〓※¤〓※\n");
printf("\n\t\t请按提示步骤进行操作\n\n\t\t备注:密码和用户名都超过十位\n\n\t\t------->:\n");
char buf[4096];
int nchars;
char code[10];
int place;
char test_ch[15];
int i,j;
memset(buf,'\0',sizeof(buf));
buf[0]='&';
printf("\n\t\t昵 称:");
scanf("%s",&buf[1]);
buf[strlen(buf)]='|';
place=strlen(buf);
printf("\n\n\t\t密 码:");
for(i=0;i<15;i++)
{
test_ch[i]=getch();
if(test_ch[i]==13)
{
for(j=0;j<i;j++)
buf[place+j]=test_ch[j];
buf[place+i]='\0';
break;
}
printf("*");
}
memset(test_ch,’\0’,sizeof(test_ch));
j=0;
printf("\n\n\t\t请再次输入密码:");
//==
for(i=0;i<15;i++)
{
test_ch[i]=getch();
if(test_ch[i]==13)
{
for(j=0;j<i;j++)
code[j]=test_ch[j];
code[i]='\0';
break;
}
printf("*");
}
if(strcmp(&buf[place],code)!=0)
{
printf("\n\n\t\t两次输入的密码不一致!\n");
return 0;
}
nchars=strlen(buf);
if(send(s,buf,nchars,0)==SOCKET_ERROR)
{
printf("\n\n\t\t连接服务器发生错误!\n");
return 0;
}
memset(buf,'\0',sizeof(buf));
if(recv(s,buf,sizeof(buf),0)==SOCKET_ERROR)
{
printf("\n\n\t\t连接服务器发生错误!\n");
return 0;
}
if(strcmp(buf,"1")==0)
{
printf("\n\n\t\t恭喜你,账号注册成功!\n");
_sleep(1000);
display();
return 1;
}
if(strcmp(buf,"0")==0)
{
printf("\n\n\t\t此昵称已被使用!\n");
_sleep(1000);
return 0;
}
if(strcmp(buf,"2")==0)
{
printf("\n\n\t\t服务器发生错误,注册未能成功!\n");
_sleep(1000);
return 0;
}
}
//------------------------------------apply end------------------------------------
//=login=======
int login()
{
char buf[4096];
char test_ch[15];
int nchars;
int i=1,m,j;
int place;
memset(buf,’\0’,sizeof(buf));
buf[0]=’@’;
printf("\n\t\t━━━━━━━━━━━━━━━━━━━━━━━\n");
printf("\n\t\t用户名:");
scanf("%s",&buf[1]);
buf[strlen(buf)]='|';
place=strlen(buf);
printf("\n\n\t\t密 码:");
//==
for(m=0;m<15;m++)
{
test_ch[m]=getch();
if(test_ch[m]==13)
{
for(j=0;j<m;j++)
buf[place+j]=test_ch[j];
buf[place+m]='\0';
break;
}
printf("*");
}
//==
//scanf("%s",&buf[strlen(buf)]);
//fgets(&buf[strlen(buf)],sizeof(buf),stdin);
// printf("%s\n",buf);
memset(save_name,’\0’,sizeof(save_name));
while(buf[i]!='|') //保存用户名给chat函数用
{
save_name[i-1]=buf[i];
i++;
}
nchars=strlen(buf);
if(send(s,buf,nchars,0)==SOCKET_ERROR)
{
printf("\n\n\t\t连接服务器发生错误!\n");
printf("\n\n\t\t");
return 0;
}
memset(buf,'\0',sizeof(buf));
if(recv(s,buf,sizeof(buf),0)==SOCKET_ERROR)
{
printf("\n\n\t\t连接--服务器发生错误!\n");
printf("\n\n\t\t");
return 0;
}
if(strcmp(buf,"1")==0)
{
printf("\n\n\t\t登录成功!\n");
printf("\n\n\t\t正在分配座位,请稍候.");
for(int m=0;m<3;m++)
{
_sleep(450);
printf(".");
}
printf("\n");
return 1;
}
else
{
printf("\n\n\t\t%s\n\n",buf);
printf("\n\n\t\t");
_sleep(800);
return 0;
}
}
//-------------------------------------login end-----------------------------------
//=chat end
void reset_server()
{
char sendbuf[2046];
memset(sendbuf,’\0’,sizeof(sendbuf));
sendbuf[0]=’^’;
_sleep(500);
if(send(s,sendbuf,strlen(sendbuf),0)==SOCKET_ERROR)
{
printf("\n —>服务器发生故障!\n");
printf("\n 即将退出聊天室。。。\n");
exit(1);
}
}
void send_info()
{
char sendbuf[4096];
int length;
int name_length;
int i=0;
char *cmd="-cmd";
void recv_info();
memset(sendbuf,’\0’,sizeof(sendbuf));
name_length=strlen(save_name);
while(i<name_length) //将用户名放置sendbuf首部
{
sendbuf[i]=save_name[i];
i++;
}
sendbuf[name_length]=':';
printf("\n >>");
fgets(&sendbuf[name_length+1],sizeof(sendbuf),stdin);
sendbuf[strlen(sendbuf)]='\0';
if(strncmp(cmd,&sendbuf[name_length+1],4)==0)
{
comand();
return ;
}
length=strlen(sendbuf);
// _beginthread((void (*)(void *))recv_info,STKSIZE,NULL);
if(send(s,sendbuf,length,0)==SOCKET_ERROR)
{
printf("\n —>发送消息时发生错误!\n");
printf("\n 即将退出聊天室。。。\n");
exit(1);
}
memset(sendbuf,’\0’,sizeof(sendbuf));
//return 1;
}
void recv_info()
{
char recvbuf[4096];
int nchars;
nchars=sizeof(recvbuf);
memset(recvbuf,'\0',sizeof(recvbuf));
// _beginthread((void (*)(void *))send_info,STKSIZE,NULL);
if(recv(s,recvbuf,nchars,0)==SOCKET_ERROR)
{
printf("\n —>接收消息发生错误!\n");
printf("\n 即将退出聊天室。。。\n");
exit(1);
}
if(strcmp(recvbuf,"@+)")==0)
{
reset_server();
return ;
}
printf("->%s\n >>",recvbuf);
}
void recv_info_chat()
{
while(1)
recv_info();
}
void send_info_chat()
{
while(1)
send_info();
}
void chat()
{
system(“cls”);
printf("\n ★ 聊 ● 天 ● 室 ★ \n\n");
printf("\n 〓○※●※○※●※○※●※○※●※○※●※○※●※○※●※○※●〓\n\n");
printf("\n 提示:输入"-cmd"进入控制台,可使用更多控制 \n");
//while(1) recv_info();
_beginthread((void (*)(void ))recv_info_chat,STKSIZE,NULL);
// _beginthread((void ()(void *))send_info_chat,STKSIZE,NULL);
while(1) send_info_chat();
}
//-------------------------------------chat-------------------------------------------
//●○★☆▲△※¤〓
//=display====
void display()
{
void describe();
int sel;
system("cls");
printf("\n\t\t◇※〓〓〓〓〓〓☆聊☆天☆室☆〓〓〓〓〓〓※◇\n");
printf("\t\t◆ ◆\n");
printf("\t\t◇ 1.注册用户 2.登录空间 ◇\n");
printf("\t\t◆ ◆\n");
printf("\t\t◇ 3.使用说明 0.退出系统 ◇\n");
printf("\t\t◆ ◆\n");
printf("\t\t◇※-------client version(9.0.2)----------※◇\n");
printf("\n\t\t请选择:");
scanf("%d",&sel);
switch(sel)
{
case 1: apply(); break;
case 2: if(login()) chat(); break;
case 3: describe(); break;
case 0: printf("\n\t\t感谢使用本产品,您已安全退出客户端!\n\n\t\t"); return ;
default: printf("\n\n\n\t\t非法操作!\n\n\n\n"); break;
}
}
void describe()
{
char sel;
system(“cls”);
printf("\n ※〓聊天室客户端软件使用说明:\n\n");
printf(" ┌───────────────────────────┐\n");
printf(" │ 1、按相关操作说明提示,注册用户账号 │\n");
printf(" │ │\n");
printf(" │ 2、进入登录部分,用已注册的账号进入聊天室 │\n");
printf(" │ │\n");
printf(" │ 3、进入聊天室后,就可以聊天了,聊天过程中 │\n");
printf(" │ 输入-cmd即可以进入控制台 │\n");
printf(" │ │\n");
printf(" │ 4、每个用户第一次进入聊天室后,系统都会发 │\n");
printf(" │ 送—>username:告诉每个在线用户 │\n");
printf(" └───────────────────────────┘\n\n");
printf(" ────────────────────────────\n");
printf("\n -------->按0显示主页面,退出按其它任意键。。。。");
getchar();
scanf("%c",&sel);
printf("\n\n\n\n");
if(sel==‘0’)
{
system(“cls”);
display();
}
else
return;
}
//-------------------------------------end display------------------------------------
void main() //主程序main函数
{
WSADATA wsadata;
if (WSAStartup(WSVERS, &wsadata)) errexit("WSAStartup failed\n");
s=connectUDP(host,service);
r=connectUDP(host,service);
display();
}