我有一个 python 程序,我想通过 http 与 C 程序通信。我在 python 中使用请求将一些 json 数据发送到 C 中的套接字。
有时,python 会吐出“由对等方重置连接”错误,我无法弄清楚。当我收到这个错误时,除了请求的内容之外的所有内容都由 C 程序发送和接收。在我的应用程序中,我还从一个用 Go 编写的客户端发出请求。对于那个客户端,我永远不会收到这些错误,这就是为什么我认为我在请求库中缺少一些配置或简单的解决方案。为什么会发生这种情况,什么可以解决我的问题?
这是一个简单的例子;套接字的东西显然是我不太熟悉的:
C服务器:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define RECV_BUF_SIZE 1024
int main(void)
{
struct sockaddr_in serv_addr, cli_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(8080);
int option = 1;
int socketfd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option));
if (socketfd < 0)
{
perror("failed to start socket");
exit(1);
}
if (bind(socketfd, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) < 0)
{
perror("failed to bind");
exit(1);
}
if (listen(socketfd, 1000) != 0)
{
perror("listen error");
exit(1);
}
char buf[RECV_BUF_SIZE];
while (1)
{
int addrlen = sizeof(cli_addr);
int clientfd = accept(socketfd, (struct sockaddr*) &cli_addr, &addrlen);
if (clientfd < 0)
{
perror("accept error");
}
else
{
int n_recv = recv(clientfd, buf, RECV_BUF_SIZE, 0);
// print everything, character by character.
char* tmp_buf = buf;
while (n_recv--) printf("%c", *tmp_buf++);
printf("\n\n****************************\n\n");
FILE* res = fdopen(clientfd, "w");
fprintf(res, "HTTP/1.1 200 OK\r\n\r\n");
fclose(res);
shutdown(clientfd, SHUT_RDWR);
close(clientfd);
}
}
}
Python 请求脚本:
import requests
json_data = {
"hello": "thanks"
}
requests.post("http://localhost:8080", json=json_data)
谢谢!
喵喵时光机
相关分类