这是我遇到过的最不寻常的事情,我正在用聊天框制作游戏,所以我正在构建一个审查功能,但我遇到了很多麻烦,虽然一切都应该工作,所以我尝试调试,我发现如果你将一个字符串设置为一个坏词(我可以在这里说它们吗?)这些词以 f、c 和 p 开头。(猜猜哪个)。因此,在客户端(Java)中输入消息,它将通过套接字发送(在发送到服务器之前显示消息(在 C++ 中),它显示得很好,但是在服务器中接收到这个词之后我显示消息,在你说的坏词的第一个字母之后,后面的所有内容都被删除。我没有显示源,因为它没有发生在程序中?客户端信息:Java,Netbeans 默认编译器服务器信息:C++,
一些资料来源:Java crypt 函数
public String crypt(String source)
{
int len=source.length();
String tempSource="";
int i;
for(i=0;i<len;i++)
{
String strAddon;
int intAddon;
char charAddon;
charAddon=source.charAt(i);
intAddon=127-((int)(charAddon));
charAddon=(char)intAddon;
strAddon=Character.toString(charAddon);
tempSource+=strAddon;
}
source=tempSource;
return source;
}
Java写函数:
public void write(String text)
{
try
{
text="|/" + text + "\\|";
System.out.println(text);//debug
text=crypt(text);
out.println(text);
}
catch(Exception err)
{
Logger.getLogger(Sockets.class.getName()).log(Level.SEVERE, null, err);
closeSockets(1);
}
}
C++ 加密函数
string crypt(string source)
{
int len=source.length();
char tempSource[len];
source.copy(tempSource, len, 0);
int i=0;
for(i=0;i<len;i++) tempSource[i]=127-tempSource[i];
source=tempSource;
int temp=0;
while((temp=source.find('\n',0)) != string::npos)
{
source=source.replace(temp,temp+1,"|");
temp++;
}
return source;
}
C++ 读取函数
string clientRead(int sock, string username)
{
if(sock == INVALID_SOCKET) return "";
vector<char> theVector;
char responseData[256];
char buffer;
int bytesRead;
memset(responseData, 0, sizeof(responseData));
while(1)
{
bytesRead=recv(sock, &buffer, 1, 0);
if(bytesRead > 0)//check to exit
{
if(buffer == '\n')
{
for(int i=0;i<theVector.size();i++) responseData[i]=theVector[i];
string decryptedData=crypt(responseData);
int beginIndex=decryptedData.find_first_of("|/")+2;
if(beginIndex == -1) beginIndex=0;
int endIndex=decryptedData.find("\\|");
if(endIndex == -1) endIndex=decryptedData.length();
decryptedData=decryptedData.substr(beginIndex, endIndex);
cout<<decryptedData<<endl;//debug
return decryptedData;
}
else theVector.push_back(buffer);
}
else//it failed
{
if(username.compare("") != 0) forceLogout(username);
return "";
}
}
}
标记为调试的地方是我显示消息的地方
这是它的视频,警告,里面有不好的词 http://youtu.be/bSFT5YyAk9E 正如你所看到的,当我用 f 说这个词时,它就会中断。