python - C和python代码之间的套接字通信

标签 python c string sockets

<分区>

我有一个 python 套接字服务器,它将字符串发送到打印字符串的 C 程序(客户端),然后将其发送回也打印它的 python 程序。通信有效,但如果它发送一个长字符串,然后发送一个短字符串,则当前和以前的数据有点合并。这是示例:

输出:

5.0standing0.0                //That is how it should look like
5.0walk0ing0.055111512313e-17 //After the long string

python 代码(只是在循环中调用):

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Bind the socket to the port
server_address = ('localhost', 8888)
print >>sys.stderr, '\nstarting up on %s port %s\n' % server_address
sock.bind(server_address)

# Listen for incoming connection
sock.listen(1)

def send_control(state,xdiff,xactual):
  connection, client_address = sock.accept()
  connection.sendall(str(xactual)+str(state)+str(xdiff))
  data = connection.recv(2000)
  print data
  data = '\0'

C 代码(也在循环中调用):

void comm_func() 
{
  int sock;
  int i=0;
  struct sockaddr_in server;
  char message[1024] , server_reply[2000];

  //Create socket
  sock = socket(AF_INET , SOCK_STREAM , 0);
  if (sock == -1)
  {
      printf("Could not create socket");
  }
  // puts("Socket created");

  server.sin_addr.s_addr = inet_addr("127.0.0.1");
  server.sin_family = AF_INET;
  server.sin_port = htons( 8888 );

  //Connect to remote server
  if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
  {
      perror("connect failed. Error");
  }

  // Receive a reply from the server
  if( recv(sock , server_reply , 2000 , 0) < 0)
  {
      puts("recv failed");
  }
  puts(server_reply);
  write(sock,server_reply,50);
  for (i=0; i< strlen(server_reply); i++)
  {
    server_reply[i] = '\0';
  }
  close(sock);
}

谁能帮帮我?

最佳答案

改变

  // Receive a reply from the server
  if( recv(sock , server_reply , 2000 , 0) < 0)
  {
      puts("recv failed");
  }

进入:

  ssize_t len;
  // Receive a reply from the server
  if( (len = recv(sock , server_reply , 2000 , 0)) < 0)
  {
      puts("recv failed");
      close(sock);
      return -1;
  }
  server_reply[len] = 0;

正如@LP 和@ack 在评论中提到的那样,问题在于短消息未以 NUL 终止,这对于套接字通信来说是正常的,其中 0 是要发送的有效字节。

关于python - C和python代码之间的套接字通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38057927/

相关文章:

python - 如何通过 S3 签名 URL 上传 zip 文件

python - 根据行中的第一个值向数据框中添加新列

c++ - 如何在 C 中找到可执行文件的位置?

c - 如何将字符串放入数组

Python - 如何从字符串列表中删除字母,将字符串更改为 float ,转换一些 float 并保持顺序

python - Python 中的 3D 多边形

python - 函数不返回任何值 - 尝试在不使用 x 的情况下找到集合中的最大数字

c++ - 如何在不使用信号量的情况下解决寿司吧问题?

java - 替换字符串中不同位置的多个字符

c - 在 Linux 内核函数中的缓冲区中查找子字符串