gpt4 book ai didi

客户端断开连接后 C 套接字 TCP 服务器失败

转载 作者:太空宇宙 更新时间:2023-11-04 10:01:16 25 4
gpt4 key购买 nike

我正在从这里修改服务器代码 http://www.linuxhowtos.org/C_C++/socket.htm .我想在客户端断开连接时重置服务器,以便下次为客户端准备好。但是当我关闭客户端时,服务器关闭并且服务器日志中没有任何内容。因为我一次只想处理一个客户,所以我不需要 fork ,对吗?否则服务器工作正常并响应我从我用 C# 编写的客户端发送的消息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

FILE *fp;

double square(double x)
{
return x*x;
}

void error(const char *msg)
{
fprintf(fp, "%s", msg);
fprintf(fp, "%s", "\n");
}

int main(int argc, char *argv[])
{
fp = fopen("serverlog.txt", "a");

int sockfd;
int newsockfd;
int portno = 43635;
int clientIsConnected;

socklen_t clilen;
char buffer[256];

struct sockaddr_in serv_addr, cli_addr;
int n;

while (1)
{
sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd < 0)
{
error("ERROR opening socket");
close(sockfd);
return 0;
}

bzero((char *) &serv_addr, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portno);

if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
{
error("ERROR on binding");
close(sockfd);
return 0;
}

if (listen(sockfd,5) < 0)
{
error("ERROR on listen");
close(sockfd);
return 0;
}

clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);

if (newsockfd < 0)
{
error("ERROR on accept");
close(newsockfd);
close(sockfd);
return 0;
}

clientIsConnected = 1;

while (clientIsConnected)
{
bzero(buffer, 256);
n = read(newsockfd, buffer, 255);

if (n < 0)
{
error("ERROR reading from socket");
clientIsConnected = 0;
break;
}

double x = atof(buffer);
double squared = square(x);
char response[256];
sprintf(response, "%f", squared);

n = write(newsockfd, response, strlen(response));

if (n < 0)
{
error("ERROR writing to socket");
clientIsConnected = 0;
break;
}
}
}

close(sockfd);
return 0;
}

最佳答案

可能是你的服务器因为收到SIGPIPE而停止。你可以使用

信号(SIGPIPE,SIG_IGN);

为了让您的程序继续运行,您可以在应用程序代码中处理关闭的通信。

关于客户端断开连接后 C 套接字 TCP 服务器失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com