我目前正在为一个大学项目使用一些gps跟踪设备,但我需要设置一个本地服务器来发送数据(我可以定义数据发送到哪个IP地址和端口(。
由于从设备发送的数据是写在二进制代码上的具有多个字节的字符串(它包含关于地理定位、温度和湿度值等的信息(,我想真正地看到整个字符串(我的想法是将其存储在记事本上,这样我就可以手动查看字符串的外观(,并解码整个字符串(将其分割成小信息包:">第一部分"对应于坐标;"从这里到那里"相应于温度传感器1的值;等等(。
由于所有这些都需要时间和多次编码,我想首先了解如何设置本地服务器(或者如果可能的话(,以便简单地查看我的"发送的字符串;客户";。
我在客户端/服务器通信方面的知识是基本的,我理解基本概念,并且我在编写套接字(我可能需要使用它来建立连接,服务器端(方面很合理。
任何帮助都将不胜感激!
编辑:
客户端
// Client side implementation of UDP client-server model
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define PORT 8080
// Driver code
int main() {
int sockfd;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
// Filling server information
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
servaddr.sin_addr.s_addr = INADDR_ANY;
// Sending message to server
sendto(sockfd, "Hello", 5, 0, (const struct sockaddr *) &servaddr, sizeof(servaddr));
printf("Message sent.n");
close(sockfd);
return 0;
}
服务器
// Server side implementation of UDP client-server model
#define PORT 8080
#define MAXLINE 1024
// Driver code
int main() {
int sockfd, len;
// Creating socket file descriptor
if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
struct sockaddr_in servaddr, cliaddr;
memset(&servaddr, 0, sizeof(servaddr));
memset(&cliaddr, 0, sizeof(cliaddr));
// Filling server information
servaddr.sin_family = AF_INET; // IPv4
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(PORT);
// Bind the socket with the server address
if ( bind(sockfd, (const struct sockaddr *)&servaddr, sizeof(servaddr)) < 0 ) {
perror("bind failed");
exit(EXIT_FAILURE);
}
char buffer[MAXLINE];
len = sizeof(cliaddr);
int n = recvfrom(sockfd, buffer, sizeof(buffer) -1, 0, ( struct sockaddr *) &cliaddr, &len);
if (n < 0)
perror("rcvfrom failed");
buffer[n] = ' ';
printf("%d bytes sent by client: %sn", n, buffer);
return 0;
}
1-谷歌对于一个简单的TCP或UDP服务器客户端应用程序,你会发现很多,
2-首先让你的服务器运行,然后使用类似telnet的东西连接到它,将你的第一条消息发送到你的服务器。(可能使用客户端将发送的示例消息(。尝试在另一个设备位于同一网络且不在同一网络时从该设备发送消息,
3-重塑你的服务器,以便解析和评估它将收到的消息(NMEA句子或它收到的任何信息(
4-然后回到示例代码,并在此基础上实现客户端。构建客户端相对来说应该花费更少的时间。
我以为你可以监听GPS和其他传感器。祝你好运