本人刚接触这个东西,水平较低,在测试上位机客户端是否可以接受数据时,出现些问题,下位机发送的数据是ff,上位机接收的情况如图,会出现乱码,还有就是数据显示的很慢,最重要的是还需要不断抽拔与WiFi模块RX接口相连的线才能有数据显示,不知道是什么原因,程序是在网上找的socket客户端的程序,请大神们帮看一下,这个问题折磨我很久了,万分感谢。
把服务端和客户端的代码贴出来吧
客户端代码
#include
#include
#include
#include
#include
using namespace std;
#pragma comment (lib, "WS2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;//加载套接字库,创建套接字
int err;
wVersionRequested = MAKEWORD( 1,1);
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);//TCP 构建通讯socket,流式socket
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.102");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(2001);
//connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//向服务器发送连接请求
if (0 != connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)))
{
std::cout << "连接服务器失败\n";
}
//send(sockClient,"hello",strlen("hello")+1,0);//和服务器进行通信
char recvBuf[500]={0};
int nLen;
while (1)
{
std::cout<<"C617";
/*recv(sockClient,recvBuf,500,0);0
printf("%s\n",recvBuf);*/
nLen=recv(sockClient,recvBuf,1,0);
std::cout<<"nLen= "<<nLen<<endl;
//std::cout<<"C617"<<std::endl;
//recvBuf[nLen-1] = '\0';
printf("%x\n",recvBuf[0]);
//cout<<recvBuf[2]<<endl;
/*if (nLen>0)
{
recvBuf[nLen-1] = '\0';
printf("%s\n",recvBuf);
}*/
}
closesocket(sockClient);//关闭套接字,关闭加载套接字库
WSACleanup();
system("pause");
}
服务器代码(这个代码是不是也需要和客户端代码一样按照socket步骤写代码呢,我没有用)
void send_data(void)
{
if(DataSend_refresh.act) //如果需要传输数据
{
// TX_data[1]=(uint8)robot_macdata.speed_leftback;
// TX_data[2]=(uint8)(robot_macdata.speed_leftback>>8);
// TX_data[3]=(uint8)robot_macdata.speed_leftfront;;
// TX_data[4]=(uint8)(robot_macdata.speed_leftfront>>8);
// TX_data[5]=(uint8)robot_macdata.speed_rightfront;
// TX_data[6]=(uint8)(robot_macdata.speed_rightfront>>8);
// TX_data[7]=(uint8)robot_macdata.speed_rightback;
// TX_data[8]=(uint8)(robot_macdata.speed_rightback>>8);
//我修改
TX_data[1]=0xff;
TX_data[2]=0xff;
TX_data[3]=0xff;
TX_data[4]=0xff;
TX_data[5]=0xff;
TX_data[6]=0xff;
TX_data[7]=0xff;
TX_data[8]=0xff;
// U_send angle;
// angle.float_data=robot_data.angle;
// angle.uint32_data=time_line;
//
/*******************将数据放置缓冲区**************************
TX_data[1]=(uint8)sample_data.acce_value;
TX_data[2]=(uint8)(sample_data.acce_value>>8);
TX_data[3]=(uint8)sample_data.gyro_bf_value;
TX_data[4]=(uint8)(sample_data.gyro_bf_value>>8);
TX_data[5]=(uint8)sample_data.gyro_lr_value;
TX_data[6]=(uint8)(sample_data.gyro_lr_value>>8);
TX_data[1]=(uint8)((int16)(robot_data.angle*10000));
TX_data[2]=(uint8)(((int16)(robot_data.angle*10000))>>8);
TX_data[3]=(uint8)((int16)(gyro_d_angle*10000));
TX_data[4]=(uint8)(((int16)(gyro_d_angle*10000))>>8);
TX_data[1]=(uint8)robot_data.left_speed;
TX_data[2]=(uint8)(robot_data.left_speed>>8);
TX_data[3]=(uint8)robot_data.right_speed;
TX_data[4]=(uint8)(robot_data.right_speed>>8);
TX_data[3]=(uint8)time_line;
TX_data[4]=(uint8)(time_line>>8);
TX_data[5]=(uint8)((int16)(robot_data.d_angle_bf*10000));
TX_data[6]=(uint8)(((int16)(robot_data.d_angle_bf*10000))>>8);
TX_data[3]=(uint8)((int16)(acce_angle*10000));
TX_data[4]=(uint8)(((int16)(acce_angle*10000))>>8);
TX_data[3]=(uint8)((int16)(gyro_d_angle*10000));
TX_data[4]=(uint8)(((int16)(gyro_d_angle*10000))>>8);
TX_data[5]=angle.uint8_data[0];
TX_data[6]=angle.uint8_data[1];
TX_data[7]=angle.uint8_data[2];
TX_data[8]=angle.uint8_data[3];
******************/
if(USART_GetFlagStatus(UART_SELECT,USART_FLAG_TC)) //如果发送完成
{
USART_DMACmd(UART_SELECT, USART_DMAReq_Tx, ENABLE); //使能UART发送的DMA请求
DataSend_refresh.act=0;
}
}
}