写入从C到Python的TCP套接字

时间:2015-05-22 20:19:26

标签: python c sockets tcp

我在C中编写了一个连接到端口5678的TCP套接字。它应该从C语言传输一个字符串到用Python编写的TCP客户端。

这是用C:

编写的服务器循环
for(;;) {
    bzero(buffer, 256);

    // Socket read functions
    n = read(clientsockfd, buffer, 255);

    if (n == 0) {
        printf("[Socket]: Client disconnected\n");
        break;
    }

    if (n < 0) {
        error("[Socket]: Error: Cannot read from socket\n");
    }

    // Socket write functions
    printf("[Socket]: Sent: %s\n", "Some message!");
    n = write(clientsockfd, "Some message!", 0);

    if (n < 0) {
        error("[Socket]: Error: Cannot write to socket\n");
    }
}

我的Python客户端连接到TCP套接字:

try:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(("localhost", 5678))
except socket.error: # Connection refused error
    logging.critical("Could not connect to the socket!")

然后客户端进入无限循环请求数据,接收数据和打印数据:

while True:
    sock.send(str(0).encode('utf-8'))
    print(sock.recv(1024).decode('utf-8')))

但是Python客户端依赖于recv()方法。

我想这是C服务器的一个问题,因为我之前有一个用Python编写的服务器,而且客户端运行得很好。

此外,在telnet中进行调试时,服务器具有预期的行为:

telnet localhost 5678

对此问题的任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:2)

n = write(clientsockfd, "Some message!", 0);

写入零字节数据。

答案 1 :(得分:2)

  

但是Python客户端依赖于recv()方法。

这是因为套接字阻塞,您无法从服务器接收任何内容。

服务器没有任何内容,因为:

write(clientsockfd, "Some message!", 0);

您要求将零字节写入套接字。

write原型是:

ssize_t write(int fd, const void *buf, size_t count);

write()从缓冲区指针count写入buf个字节到fd