gpt4 book ai didi

python - 我的python客户端向c服务器发送一个整数,但服务器收到0

转载 作者:行者123 更新时间:2023-11-30 15:15:36 28 4
gpt4 key购买 nike

服务器.c

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <string.h>
#include <unistd.h>
int main() {
int s;
struct sockaddr_in server, client;
int c, l;
s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 0) {
printf("Eroare la crearea socketului server\n");
return 1;
}
memset(&server, 0, sizeof(server));
server.sin_port = htons(1234);
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
if (bind(s, (struct sockaddr *) &server, sizeof(server)) < 0) {
printf("Eroare la bind\n");
return 1;
}
listen(s, 5);
l = sizeof(client);
memset(&client, 0, sizeof(client));
while (1) {
int a, b, suma;
c = accept(s, (struct sockaddr *) &client, &l);
printf("S-a conectat un client.\n");
// deservirea clientului
recv(c, &a, sizeof(a), 0);
recv(c, &b, sizeof(b), 0);
a = ntohs(a);
b = ntohs(b);
suma = a + b;
suma = htons(suma);
send(c, &suma, sizeof(suma), 0);
close(c);
// sfarsitul deservirii clientului;
}
}

现在的想法很简单:服务器应该接收 2 个数字,将它们相加,然后将结果发送回客户端。

客户端.py

import socket
import struct
import sys

def main():
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
client.connect(('localhost',1234))
except socket.error as error:
print('Connect error:',error)
exit(1)
a=int(input('a='))
b=int(input('b='))
try:
client.sendall(struct.pack('!i',a))
client.sendall(struct.pack('!i',b))
except socket.error as error:
print("Send error:",error)
exit(1)
try:
suma=client.recv(sys.getsizeof(int))
suma=struct.unpack('!i', suma)[0]
print("a + b =",suma)
except socket.error as error:
print("Receive error:",error)
exit(1)
if __name__ == '__main__':
main()

客户端正确地发送了数字,至少我这么认为,在具有相同功能的Python服务器上,它可以工作,奇怪的是C客户端与Python服务器一起工作,但是当我使用C服务器运行时python客户端,服务器接收a和b的值为0。有什么想法吗?

尝试使用下面提到的缓冲区,没有结果,仍然收到 0。

另外,我忘了提及我检查了recv的值,与a和b的大小完全相同,没有recv错误。

最佳答案

您的服务器在应该使用 ntohl() 时调用 ntohs()s(“short”)版本对两字节整数进行操作。 l(“long”)版本对四字节整数进行操作。

试试这个:

          a = ntohl(a);
b = ntohl(b);

          suma = htonl(suma);

引用:http://linux.die.net/man/3/htons

关于python - 我的python客户端向c服务器发送一个整数,但服务器收到0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33509903/

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