TCP不是实时发送数据

时间:2018-04-02 10:38:29

标签: c sockets tcp arduino ethernet

几个星期前,我通过TCP数据包开始讨论PC和Arduino之间的通信(这里讨论:Issues with TCP on Arduino)。 我解决了所有通信问题,但现在我面临另一个问题:TCP数据包不是实时发送的。 在一个包和另一个包之间花费一秒钟的时间来减慢这个过程。我想要一个接收连续数据流的应用程序,我认为可以立即发送(和接收)简单的TCP数据包。但它不是那样的。

这是PC部件代码:它读取文本文件并发送每行读取的一些字符。当所有行都被读取时,该过程结束。

int send_data(){
   WSADATA wsa;
   SOCKET s;
   struct sockaddr_in server;

   if (WSAStartup(MAKEWORD(2,2),&wsa) != 0){
       printf("Failed. Error Code : %d",WSAGetLastError());
       return 0;
   }


   //Create a socket
   if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET){
       printf("Error: %d" , WSAGetLastError());
   }
   else
       printf("Socket created.\n");


   server.sin_addr.s_addr = inet_addr("192.168.1.144"); //Arduino IP
   server.sin_family = AF_INET;
   server.sin_port = htons( 1456 ); //Listen Port 

   if (connect(s , (struct sockaddr *)&server , sizeof(server)) < 0){
       printf("Failed. Error Code : %d",WSAGetLastError());
       return 0;
   }

   printf("Connected");


   char line[200];
   FILE *fp;
   if ((fp = fopen("C:\\Users\\...\\file.txt","r")) == NULL){
       printf("\nAn error occured opening file.");
       exit(-1);
   }


   while (fgets(line, sizeof(line), fp) != NULL) {
        char send_character[8];

        /*
        [...parsing character...]

        send_character[0]= ?
        send_character[1]= ?
        send_character[2]= ?
        send_character[3]= ?
        send_character[4]= ?
        send_character[5]= ?
        send_character[6]= ?
        send_character[7]= ?

        */


        if( send(s , send_character , 8 , 0) < 0){
            printf("Send failed");
            return 1;
        }

   }


   printf("\n\nData sent.");

   //Closing socket:
   if(closesocket(s)==SOCKET_ERROR) {
       wprintf(L"Error: %d\n", WSAGetLastError());
       WSACleanup();
       return 0;
   }

   WSACleanup();
   return 1;
}
你能告诉我我错了吗? 谢谢!

0 个答案:

没有答案