我正在尝试通过3g和TCP连接将数据包发送到服务器。以下是我发现的.cpp和.h文件的链接:
https://os.mbed.com/users/Nels885/code/Adafruit_FONA_3G/
更具体地说,我对TCPSend
类下的Adafruit_FONA_3G
的工作方式感到困惑。我正在尝试实现它,但是我的代码似乎卡在函数packet[0] = 0;
下的bool Adafruit_FONA_3G::TCPsend(char *packet)
中。
我尝试注释掉packet[0] = 0
;然后代码一直运行。我还尝试过在char* packet[32];
之前初始化packet[0] = 0;
,并且代码一直运行。我假设该功能未检测到数据包输入。
这是.cpp文件中的特定功能:
bool Adafruit_FONA_3G::TCPsend(char *packet)
{
if (strlen(packet) > 0)
{
mySerial.printf("%s", packet);
//mySerial.printf("%s\r\n", packet);
readline();
packet[0] = 0;
return true;
}
else
return false;
}
这是我的主要代码:
#include "mbed.h"
#include "Adafruit_FONA.h"
#define FONA_RST D4
#define FONA_TX D1
#define FONA_RX D0
#define FONA_RI D7 //not used
char replybuffer[255];
Adafruit_FONA_3G fona(FONA_TX, FONA_RX, FONA_RST, FONA_RI);
Serial pc(USBTX, USBRX);
int main()
{
fona.TCPinitialize();
char Timeout[21];
fona.getTCPtimeout(Timeout);
char * Server = "52.14.99.26";
uint16_t Port = 10001;
fona.TCPconnect(Server,Port);
char *Packet = "Pick Up %";
fona.TCPsend(Packet);
fona.TCPclose();
}
答案 0 :(得分:1)
Adafruit_FONA_3G::TCPsend()
假定您为其传递了一个可写缓冲区。您正在传递一个只读缓冲区。因此,替换
char *Packet = "Pick Up %";
与
char Packet[] = "Pick Up %";
问题实际上是编译器允许您使用只读值初始化可写指针。这是您的编译器的缺点。