2021-02-02

<------ 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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值