Android客户端HTTP请求异常sendto failed: ECONNRESET (Connection reset by peer)解决方案

异常产生原因是:

客户端上传图片的http请求使用了长连接,但web端的长连接响应数量有限制,所以产生的现象是系统运行一段时间后,长连接的http请求报异常。


解决方案:

方案一:可以把客户端请求改成短连接,修改http header:Connection=close   (http1.1协议默认是Connection=Keep-Alive,也就是长连接)

方案二:客户端不用动,还是长连接。服务端修改配置,增加长连接限额。
1、【tomcat】配置文件server.xml,增加两个参数
     <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000" maxKeepAliveRequests="5000" keepAliveTimeout="60000"
               redirectPort="8443" />
2、【apache】配置文件核对是否有以下三个参数,如果有请修改,没有请添加:
    KeepAlive On
    MaxKeepAliveRequests 5000
    KeepAliveTimeout 60000

具体问题需要具体分析,方案二基于的是客户端数量是在一定范围内,如果情况不同,则需要重新审视

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的服务器端程序,使用C语言编写,监听在8888端口。当客户端程序发送字符串“getdatetime”时,服务器端程序会返回当前时间,格式为“yyyy-MM-dd HH:mm:ss”。 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #define PORT 8888 #define MAXLINE 1024 int main() { int sockfd; struct sockaddr_in servaddr, cliaddr; char buf[MAXLINE]; char* getdatetime = "getdatetime"; time_t now; struct tm* timeinfo; sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket"); exit(EXIT_FAILURE); } memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(PORT); if (bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0) { perror("bind"); exit(EXIT_FAILURE); } while (1) { socklen_t len = sizeof(cliaddr); int n = recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr*)&cliaddr, &len); if (n < 0) { perror("recvfrom"); continue; } buf[n] = '\0'; printf("Received request from %s:%d: %s\n", inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port), buf); if (strcmp(buf, getdatetime) == 0) { now = time(NULL); timeinfo = localtime(&now); strftime(buf, MAXLINE, "%Y-%m-%d %H:%M:%S", timeinfo); if (sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr*)&cliaddr, len) < 0) { perror("sendto"); continue; } } } close(sockfd); return 0; } ``` 该程序使用UDP协议进行通信。当接收到客户端发送的字符串“getdatetime”时,程序会获取当前时间并将其格式化为字符串,然后通过sendto函数将其发送回客户端。如果接收到的请求不是“getdatetime”,则程序会忽略该请求并等待下一个请求。程序会一直监听在8888端口,直到被中断或关闭。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值