<------ config.h ------>
#define PORT 6969
#define IP "127.0.0.1"
#define ARR_LEN 4
struct testStruct
{
char c;
int arr[ARR_LEN]; //数组长度为4
};
<------- server.c ------>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "config.h"
/* 服务器端主程序 */
int main(void)
{
/* 1,创建udp套接字 */
int sock = socket(AF_INET,SOCK_DGRAM,0);
if(sock<0)
{
perror("socket create failed!");
exit(1);
}
struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(PORT); // config.h中的 6969
local.sin_addr.s_addr = inet_addr(IP); // "127.0.0.1"
/* 2,绑定套接字与IP和端口 */
if(bind(sock, (struct sockaddr*)&local, sizeof(local))<0)
{
perror("binding failed!"); // 绑定失败
exit(1);
}
char rcvbuf[1024];
struct sockaddr_in client;
socklen_t len = sizeof(client);
/* 3,监听端口 127.0.0.1:6969 */
for (;;)
{
memset(rcvbuf, 0, sizeof(rcvbuf));
int r = recvfrom(sock, rcvbuf, sizeof(rcvbuf), 0, (struct sockaddr*)&client, &len);
if (r<0) // 接受数据错误
{
perror("server: recvfrom function failed!");
break;
}
/* 数据接受成功,并处理*/
struct testStruct * pst = (struct testStruct *)rcvbuf;
printf("服务端接受如下:\n");
for (int i = 0; i < ARR_LEN; i++)
{
printf("%x\n", pst->arr[i]);
}
printf("\n");
}
close(sock);
return 0;
}
<-------- client.c ---------->
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "config.h"
/* 客户端主程序 */
int main(void)
{
/* 1, 创建udp套接字 */
int sock = socket(AF_INET, SOCK_DGRAM, 0);
if(sock < 0)
{
perror("socket\n");
return 2;
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port=htons(PORT); // PORT 为6969
server_addr.sin_addr.s_addr = inet_addr(IP); // "127.0.0.1"
socklen_t len = sizeof(server_addr);
struct testStruct st =
{
'H',
{0x12345678, 0x11223344, 0x55667788, 0x99aabbcc}
};
printf("发送了数据如下:\n");
for (int i = 0; i < ARR_LEN; i++)
{
printf("%x\n", st.arr[i]);
}
/* 2, 发送数据 */
if ( sendto(sock, (void*)&st, sizeof(st), 0, (struct sockaddr*)&server_addr, len) < 0 )
{
perror("send failed!");
exit(3);
}
close(sock);
return 0;
}