发现问题了,似乎是建立多个正确server ip后无法连接 我的错误样例:
3
Server 1.1.1.1:2
Server 1.1.1.1:3
Client 1.1.1.1:3
(输出)
OK
OK
FAIL
代码:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1001;
string com[MAXN];
string addr[MAXN];
bool isBusy[MAXN];
bool isValid[MAXN];
int n;
int ljnum=1; //连接序号
bool isRightAddr(string addr){
int a=1,b=1,c=1,d=1,p=1;
int last=0;
while(addr[last]!='.'){
if(a<10) a=0;
a=(a+int(addr[last]-'0'))*10;
last++;
if(addr[last]=='.') a/=10;
}
last++;
while(addr[last]!='.'){
if(b<10) b=0;
b=(b+int(addr[last]-'0'))*10;
last++;
if(addr[last]=='.') b/=10;
}
last++;
while(addr[last]!='.'){
if(c<10) c=0;
c=(c+int(addr[last]-'0'))*10;
last++;
if(addr[last]=='.') c/=10;
}
last++;
while(addr[last]!=':'){
if(d<10) d=0;
d=(d+int(addr[last]-'0'))*10;
last++;
if(addr[last]==':') d/=10;
}
last++;
while(last<addr.size()){
if(p<10) p=0;
p=(p+int(addr[last]-'0'))*10;
last++;
if(last==addr.size()) p/=10;
}
// cout<<a<<"."<<b<<"."<<c<<"."<<d<<":"<<p<<endl;
if(a>=0&&a<=255&&b>=0&&b<=255&&c>=0&&c<=255&&d>=0&&d<=255){
if(p>=0&&p<=65535){
return true;
}
}
}
int cj(string add,int l){
if(isRightAddr(add)){
for(int i=0;i<l;i++){
if(addr[i]==add && com[i]=="Server"){
return -1; //ip重复
}
}
}else{
return -2; //ip不符合规范
}
isValid[l]=true;
return 1; //正确
}
int lj(string add,int l){
if(isRightAddr(add)){
for(int i=0;i<l;i++){
if(addr[i]==add && com[i]=="Server" && isBusy[i]==false && isValid[i]==true){
isBusy[i]=true;
return 1; //连接成功
}else{
return -1;//连接失败
}
}
}else{
return -2; //ip不符合规范
}
}
int main(){
memset(isBusy,0,sizeof(isBusy));
memset(isValid,0,sizeof(isValid));
cin>>n;
for(int i=0;i<n;i++){
cin>>com[i]>>addr[i];
}
for(int i=0;i<n;i++){
// cout<<"isBusy:";
// for(int i=0;i<n;i++)
// cout<<isBusy[i]<<" ";
// cout<<endl;
// cout<<"isValid:";
// for(int i=0;i<n;i++)
// cout<<isValid[i]<<" ";
// cout<<endl;
// cout<<"ljnum:";
// cout<<ljnum<<endl;
if(com[i]=="Server"){
if(cj(addr[i],i)==1){
cout<<"OK\n";
}else if(cj(addr[i],i)==-1){
cout<<"FAIL\n";
}else if(cj(addr[i],i)==-2){
cout<<"ERR\n";
}
}else if(com[i]=="Client"){
if(lj(addr[i],i)==1){
cout<<ljnum<<endl;
ljnum++;
}else if(lj(addr[i],i)==-1){
cout<<"FAIL\n";
}else if(lj(addr[i],i)==-2){
cout<<"ERR\n";
}
}
}
return 0;
}