C++ Unix网络编程中的同步问题
我正在为我的一个项目“拍卖”编程。我在服务器端和客户端都设置了登录的所有条件。在一些语句出现之前,我的程序运行得更好,但同时服务器停止响应。 我通过把打印语句放到网上进行研究,发现这是同步问题,而不是编码问题。也许原因会有所不同,我不确定。 我还想提到的是,当我在while条件下启用“read()”时,一切都按预期运行。是否有人可以告诉我如何删除/避免此同步问题(可能是其他问题,而不是同步)? Server.cpp(仅运行良好的部分)C++ Unix网络编程中的同步问题,c++,sockets,unix,C++,Sockets,Unix,我正在为我的一个项目“拍卖”编程。我在服务器端和客户端都设置了登录的所有条件。在一些语句出现之前,我的程序运行得更好,但同时服务器停止响应。 我通过把打印语句放到网上进行研究,发现这是同步问题,而不是编码问题。也许原因会有所不同,我不确定。 我还想提到的是,当我在while条件下启用“read()”时,一切都按预期运行。是否有人可以告诉我如何删除/避免此同步问题(可能是其他问题,而不是同步)? Server.cpp(仅运行良好的部分) while((n=read(sockfd,buffer,40
while((n=read(sockfd,buffer,4096))!=0)和&(l==false)){
如果(i==0)coutYour循环无效。read()
也可以返回-1,并且不能保证填充缓冲区。您不需要bzero()
,但需要使用read()的结果
处理缓冲区时..谢谢回复!很抱歉,我没有在这里使用缓冲区,只是为了简单起见,并检查它为什么不工作。但我想知道“在使用上述for循环时,服务器中是否存在类似同步的问题?”
while(((n = read(sockfd,buffer,4096))!=0)&&(l==false)) {
if(i==0) cout<<"Username:"<<buffer;
if(i==1) { l = true; cout<<"Password:"<<buffer; }
i++;
}
for(i=0; i<2; i++) { cout<<endl<<"i="<<i<<endl;
bzero(&buffer, sizeof(buffer));
if((n = read(sockfd,buffer,4096))==0) { cout<<"problem";
close(sockfd);
FD_CLR(sockfd, &allset);
client[i] = -1;
} else { cout<<buffer<<i<<endl; if(i==1) {cout<<"copied password"; }
if(i == 0) { cout<<"copied user";} }