【发布时间】:2013-12-26 13:01:32
【问题描述】:
我这里有点问题:
我有一个简单的 C 服务器(不能使用 Qt TcpServer,嵌入式板的限制),它使用 send()double 数据(由 GPIO 端口生成) /强>。如果我有一个简单的 C 客户端(在我的 Linux PC 中),那么我可以获取在 recv() 的帮助下生成的实时数据。这是我的服务器代码:
int main (void){
int s,b,l,fd,sa,bytes,on=1;
char buf[BUF_SIZE],fname[255];
struct sockaddr_in channel;
long long sum=0;
double average=0;
int i,j;
int srno=0;
s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s<0)
{
printf("socket creation failure");
exit(0);
}
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&on,sizeof(on));
memset(&channel,0,sizeof(channel));
channel.sin_family=AF_INET;
channel.sin_addr.s_addr=htonl(INADDR_ANY);
channel.sin_port=htons(SERVER_PORT);
b=bind(s, (struct sockaddr *)&channel,sizeof(channel));
if(b<0)
{
printf("bind error");
exit(0);
}
listen(s,5);
while(1)
{
printf("waiting for request\n");
sa=accept(s,0,0);
if(sa<0)
{
printf("accept failure");
}
for (i=1; i<=56; i++) //for 10 sec >> 56
{
for(j=1;j<=20;j++)
{
//more than 100 lines of code here
}
average=(sum/20)*1.22;
send(sa, &average, sizeof(average), 0);
//int tmp = htonl((uint32_t)average); //tried this also
//send(sa, &tmp, sizeof(tmp), 0);
// int n = write(sa, &average, sizeof(average)) //and tried this also
// if(n<0){
// printf("error");}
printf("%lld \n", average);
srno++;
sum=0;
average=0;
}
}
remove_gpio();
close(s);
return 0;
}
但我无法在 Qt 客户端中显示数据,这让我发疯。在我的 QtextEdit 中,无论我尝试什么,我都会得到非 ASCII 字符。在我的 startRead() 里面我做了
...
QByteArray Data = socket->readAll();
ui->textEdit->append(QString(Data));
...
我也尝试过使用其他方法bytesavailable() canreadLine(),也通过了其他链接但不成功。
我每次都会得到非 ASCII 疯狂字符。抱歉,由于代表人数少,无法提供图片。 我需要有关通过套接字发送双重数据的帮助,并且能够处理数据或至少在 QTextEdit/QPlainTextEdit 中显示它们。
谢谢。
【问题讨论】:
-
代码缺少右大括号
}。而且格式不太好。 -
抱歉,我在复制时遗漏了几个大括号。但是服务器代码确实有效。我似乎无法通过套接字在客户端获取双重数据。
-
标题不需要加“已解决”,当你接受答案时,带有赞成票的图标会改变
-
你加的牙套好像放错地方了,至少掉了一个!