目录
C/C++实现TCP通信、接收WIFI数据
编程环境:VC++6.0
手机端:使用WiFi调试助手
提示:整个过程在局域网中进行
很多编程语言都可以实现socket通信。
本博客将通过C/C++实现WiFi(socket)数据的收发,并将电脑端分别作为客户端和服务端实现。
客户端(client)
电脑端作为客户端,手机端作为服务端,电脑端程序需要设置手机端IP地址,和手机端的端口号。
经过查询
手机端的IP地址为:192.168.31.171
设置的端口号为:8080
所以电脑端程序修改如下:
//初始化 DLL
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
//创建套接字
SOCKET sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
//绑定套接字
struct sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr)); //每个字节都用0填充
sockAddr.sin_family = PF_INET;
sockAddr.sin_addr.s_addr = inet_addr("192.168.31.171");
sockAddr.sin_port = htons(8080);
connect(sock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
// 设置接收空间
char szBuffer[MAXBYTE] = { 0 };
在电脑端增加手机端IP地址和端口号PORT,然后循环接收手机端发来的数据,也可以向手机端发送数据。
while(1)
{
recvbyte = recv(sock, szBuffer, MAXBYTE, NULL);
if (recvbyte < 0)
{
perror(" recv error. ");
return -1;
}
else if (recvbyte == 0)
{
printf("client exit. \n");
break;
}
else
{
szBuffer[recvbyte] = '\0';
printf("Message form server: %s\n", szBuffer);
bytes_sent = send(sock, message, strlen(message), 0); // 数据发送
// 存入数据库
}
}
需要启动手机端服务端,打开安装的WIFI调试助手。
运行电脑端C程序,连接手机端。
连接成功后,手机端会显示连接的电脑端IP和端口号。
电脑端IP查询:
通信效果展示:
电脑端(client端)收到手机端(server端)发来的数据
手机端(server端)收到 电脑端(client端)发来的数据
可以发现电脑作为客户端,手机作为服务端 可以正常交互信息。
服务端(server)
电脑端作为服务端,手机端作为客户端,电脑端设置好自己本机IP和端口号。
经过查询
本机IP地址为:192.168.31.17
设置的端口号为:8080
电脑端程序如下:
//初始化 DLL
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
//创建套接字
SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
//绑定套接字
struct sockaddr_in sockAddr;
memset(&sockAddr, 0, sizeof(sockAddr)); //每个字节都用0填充
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(8080);
sockAddr.sin_addr.s_addr = inet_addr("192.168.31.17");
bind(servSock, (SOCKADDR*)&sockAddr, sizeof(SOCKADDR));
//进入监听状态
listen(servSock, 20);
//接收客户端请求
SOCKADDR clntAddr;
int nSize = sizeof(SOCKADDR);
SOCKET clntSock = accept(servSock, (SOCKADDR*)&clntAddr, &nSize);
char buf[128];
int recvbyte;
char *message = "Hello, WiFi!"; // 要发送的数据
配置好服务端后,接下来就可以循环接收WiFi数据,也可以通过WiFi发送数据。
while (1)
{
recvbyte = recv(clntSock, buf, sizeof(buf), 0); // 数据接收
if (recvbyte < 0)
{
perror(" recv error. ");
return -1;
}
else if (recvbyte == 0)
{
printf("client exit. \n");
break;
}
else
{
buf[recvbyte] = '\0';
printf(" buf :%s\n", buf);
send(clntSock, message, strlen(message), 0); // 数据发送
// 存入数据库
}
}
接下来需要将电脑端程序运行,然后开启手机端WiFi调试助手,连接服务端。
连接成功后,电脑端接收手机端发来的数据。
手机端也可以收到电脑端发来的数据,这样就实现了WiFi数据的互传。
源码连接: