c++ - 即使在与客户端连接后,服务器代码也不显示输出
问题描述
我有一个充当服务器的功能,另一个充当客户端的功能。我能够相互通信,但是我想作为输出(服务器)打印的数据在我关闭套接字之前不会打印。但是输出显示给他的客户。
客户代码
void SubscriberConnection::ReceiveFileFromPublisher()
{
char buff[1024];
string check="verified";
int n;
//sending key
bzero(buff,sizeof(buff));
read(SubToPubSockfd,buff,sizeof(buff));
cout<<buff<<"\n";
bzero(buff, sizeof(buff));
n=0;
while ((buff[n++] = getchar()) != '\n');
write(SubToPubSockfd, buff, sizeof(buff));
//receiving verification
bzero(buff, sizeof(buff));
read(SubToPubSockfd, buff, sizeof(buff));
string reply(buff);
if (reply.compare(check) == 0)
{
cout << "Enter name of file required\n";
bzero(buff, sizeof(buff));
n = 0;
while ((buff[n++] = getchar()) != '\n');
write(SubToPubSockfd, buff, sizeof(buff));
cout<<"File request sent \n";
int ch = 0;
char buffer[256] = {0};
FILE *fp;
fp = fopen(buff, "a");
int words;
read(SubToPubSockfd, &words, sizeof(int));
while (ch != words)
{
read(SubToPubSockfd, buffer, 255);
fprintf(fp, "%s", buffer);
ch++;
}
printf("The file was received successfully\n\n");
}
服务器代码
void PublisherConnection::listenForSubscriber()
{
ALSSockFd = socket(AF_INET, SOCK_STREAM, 0);
if (ALSSockFd < 0)
error("ERROR opening socket");
else
printf("Socket successfully created..\n");
bzero((char *)&ALSServAddr, sizeof(ALSServAddr));
ALSServAddr.sin_family = AF_INET;
ALSServAddr.sin_addr.s_addr = htonl(INADDR_ANY);
ALSServAddr.sin_port = htons(PORT_PUB_SUB);
if (bind(ALSSockFd, (struct sockaddr *)&ALSServAddr, sizeof(ALSServAddr)) < 0)
{
error("ERROR on binding");
}
else
printf("Socket successfully binded..\n");
if ((listen(ALSSockFd, 5)) != 0)
{
printf("Listen failed...\n");
exit(0);
}
else
printf("Publisher listening..\n");
SubLen = sizeof(Sub_Addr);
ALSNewSockFd = accept(ALSSockFd, (struct sockaddr *)&Sub_Addr, &SubLen);
if (ALSNewSockFd < 0)
{
error("ERROR on accept");
}
else
cout << "Connected to Subscriber";
askForFile();
}
void PublisherConnection::askForFile()
{
string key = "123456\n";
char buff[1024];
int n, i;
//asks to enter key
string message="Please enter the key";
write(ALSNewSockFd,message.c_str(),sizeof(message));
cout<<"Asked For key";
//receives key;
bzero(buff, sizeof(buff));
read(ALSNewSockFd, buff, sizeof(buff));
string inputKey(buff);
if (key.compare(inputKey) == 0)
{
string message = "verified";
write(ALSNewSockFd, message.c_str(), sizeof(buff));
//receving file name
bzero(buff, sizeof(buff));
read(ALSNewSockFd, buff, sizeof(buff));
cout << "\nPublisher asked for:" << buff;
sendFileToSub(buff);
//printf("From Subscriber : %s", buff);
//}
}
else{
string message = "Wrong key";
write(ALSNewSockFd, message.c_str(), sizeof(buff));
askForFile();
}
}
连接发生后,正在接收并打印从服务器发送的任何数据,但在服务器上正在发送数据,但未打印任何后续 cout 语句
编辑:套接字是全局变量,因此我们可以重用它们。
解决方案
推荐阅读
- php - Silverstripe 4 getCMSFields_forPopup 和 GridField
- javascript - 向控制台日志添加颜色
- jekyll - 安装 Jekyll 时 make failed, uncaught signal 11 错误
- php - 通过数据库循环向 API 发送 CURL 请求
- python - Python Web Scraping / Beautiful Soup,在 URL 末尾带有关键字列表
- html - 如何更改 Blazor 服务器应用程序的 hte _Host.cshtml 文件中的正文类?
- apache-spark - 如何将 Spark Streaming 检查点位置存储到 S3 中?
- php - MySQL 组 Epoch 时间戳每 15 分钟
- objective-c - 在objective-c协议前向声明中声明协议一致性
- java - Java中的多行输入