我试图让C客户端连接到UNIX/Linux中的Python服务器。但是,似乎我的C客户端无法连接到Python服务器。我尝试在本地主机上运行,但似乎没有工作。 将主机名硬编码到服务器和客户端(至“127.0.0.1”)也不起作用。UNIX套接字编程:获取C客户端连接到Python服务器的问题
下面是Python的服务器代码:
import socket
import sys
HOST = "127.0.0.1"
PORT = 8888
print("creating socket...")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("binding socket...")
try:
s.bind((HOST, PORT))
except socket.error as err:
print("error binding socket, {}, {}".format(err[0], err[1]))
print("successfully bound socket")
s.listen(1)
print("now listening on {}:{}".format(HOST, PORT))
while True:
conn, addr = s.accept()
conn.sendall(str.encode("testing"))
#conn.close()
s.close()
...这是为C客户端代码:
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
int main(int argc, char** argv) {
if (argc != 3) {
printf("usage: client [HOSTNAME] [PORT]\n");
return 0;
}
const char *hostname = argv[1];
int port = atoi(argv[2]);
int sockfd = 0, n = 0;
char recvBuff[1024];
struct sockaddr_in saddr;
memset(recvBuff, '0', sizeof(recvBuff));
if (sockfd = socket(AF_INET, SOCK_STREAM, 0) < 0) {
fprintf(stderr, "error: could not create socket\n");
return 1;
}
saddr.sin_family = AF_INET;
saddr.sin_port = htons(port);
saddr.sin_addr.s_addr = htonl(hostname);
if (connect(sockfd, (struct sockaddr_in*)&saddr, sizeof(saddr)) < 0) {
fprintf(stderr, "error: could not connect to %s:%i\n", hostname, port);
return 1;
}
while (n = read(sockfd, recvBuff, sizeof(recvBuff) - 1) > 0) {
recvBuff[n] = 0;
if (fputs(recvBuff, stdout) == "EOF") {
fprintf(stderr, "error: fputs\n");
}
printf("\n");
}
return 0;
}
有趣的是,我仍然可以连接到Python的服务器通过其他方式,如telnet或通过此客户端用Python编码:
import socket
import sys
HOST = "localhost"
PORT = 8888
print("creating socket")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("attempting to connect to host")
try:
s.connect((HOST, PORT))
except socket.error as err:
print("error: could not connect to host, {}, {}".format(err[0], err[1]))
sys.exit()
print("successfully connected to host")
data = s.recv(1024)
s.close()
print("The server responded with: {}".format(data))
我认为这是一个客户端问题,然后,因为连接到服务器的其他方法似乎工作得很好。如果是这样的话,我该如何解决C代码连接问题?如果情况并非如此,这可能是与我的网络有关的问题吗?我试着在Arch VM和我的学校的IT服务器上运行,并且都取得了相同的结果。
当你的C客户端“不工作”时会发生什么? –
您是否尝试过在调试器中运行客户端以查看它在做什么? –
C客户端无法连接。它停在“错误:无法连接到[主机]”,并退出。我认为这意味着客户端只是无法连接到服务器。不,我还没有在调试器中运行客户端。 –