我在的問題的情況在這裏位:由C服務器發送數據在套接字QT客戶
我有一個簡單的C服務器(不能使用Qt TCPSERVER,嵌入式主板的限制),這將使用send()通過tcpsocket雙重數據(由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數據=插座 - > readAll();
ui-> textEdit-> append(QString(Data));
...
我也嘗試使用其他方法參考bytesAvailable()canreadLine(),並且還可以通過其他環節去,但沒有成功。
非ASCII的瘋狂字符是我每次得到的。對不起,由於低代表無法提供照片。 我需要關於通過套接字發送雙重數據並且能夠使用數據或至少在QTextEdit/QPlainTextEdit中顯示它們的幫助。
謝謝。
代碼忽略了大括號'}'。而且格式不太好。 – alk
對不起,我在複製時錯過了一些大括號。但服務器代碼確實有效。雖然我似乎無法通過套接字在客戶端獲得雙重數據。 – rNov
無需在標題中添加「已解決」,當您接受答案時,帶有upvotes的圖標會發生變化 –