Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Unix网络编程中的同步问题_C++_Sockets_Unix - Fatal编程技术网

C++ Unix网络编程中的同步问题

C++ Unix网络编程中的同步问题,c++,sockets,unix,C++,Sockets,Unix,我正在为我的一个项目“拍卖”编程。我在服务器端和客户端都设置了登录的所有条件。在一些语句出现之前,我的程序运行得更好,但同时服务器停止响应。 我通过把打印语句放到网上进行研究,发现这是同步问题,而不是编码问题。也许原因会有所不同,我不确定。 我还想提到的是,当我在while条件下启用“read()”时,一切都按预期运行。是否有人可以告诉我如何删除/避免此同步问题(可能是其他问题,而不是同步)? Server.cpp(仅运行良好的部分) while((n=read(sockfd,buffer,40

我正在为我的一个项目“拍卖”编程。我在服务器端和客户端都设置了登录的所有条件。在一些语句出现之前,我的程序运行得更好,但同时服务器停止响应。 我通过把打印语句放到网上进行研究,发现这是同步问题,而不是编码问题。也许原因会有所不同,我不确定。 我还想提到的是,当我在while条件下启用“read()”时,一切都按预期运行。是否有人可以告诉我如何删除/避免此同步问题(可能是其他问题,而不是同步)? Server.cpp(仅运行良好的部分)

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";} }