几个星期前,我通过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;
}
你能告诉我我错了吗?
谢谢!