2024年一种简单的UDP服务器框架_,2024年最新没想到一个Handler还有中高级几种问法

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

struct sockaddr_in server;
// create socket , same as client
*serverfd = socket(AF_INET, SOCK_DGRAM, 0);
if(*serverfd < 0) return -1;
/// initialize structure dest
memset((void*)&server, '\0', sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = INADDR_ANY;
// Assign a port number to socket
bind(*serverfd, (struct sockaddr*)&server, sizeof(server));

return *serverfd;

}
/*

  • @brief initialize UDP client

  • @clientfd client socket fd

  • return client socked fd for success, on error return error code
    */
    int UDPClientInit(int *clientfd) {
    *clientfd = socket(AF_INET, SOCK_DGRAM, 0);

    return clientfd;
    }
    /

  • @brief UDPRecv from UDP socket

  • @clientfd socket fd

  • @buf receving buffer

  • @size buffer size

  • @from_ip the client ip address of requested from UDP

  • return the length of receive data
    */
    int UDPRecv(int sockfd, void *buf, size_t size, char *from_ip, int *port) {
    struct sockaddr_in client;
    size_t addrlen = 0;
    int rc;
    memset(&client, ‘\0’, sizeof(client));
    addrlen = sizeof(client);
    rc = recvfrom(sockfd, buf, size, 0, (struct sockaddr *)&client, &addrlen);
    strcpy(from_ip, (const char *)inet_ntoa(client.sin_addr));
    *port = htons(client.sin_port);

    return rc;

}
/*

  • @brief UDPSend from UDP socket

  • @clientfd socket fd

  • @buf sending buffer

  • @size buffer size

  • @to_ip the ip address of target server

  • return the length of sending data
    */
    int UDPSend(int sockfd, const void *buf, size_t size, const char *to_ip, const int *port) {
    struct sockaddr_in server;
    memset(&server, ‘\0’, sizeof(server));
    server.sin_family = AF_INET;
    server.sin_port = htons(*port);
    inet_aton(to_ip, &server.sin_addr);

    return sendto(sockfd, buf, size, 0, (struct sockaddr )&server, sizeof(server));
    }
    /

  • close the socket

  • */
    int UDPClose(int sockfd) {
    return close(sockfd);
    }


  
 进入server 

![](https://img-blog.csdn.net/20141019111517203?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3poaWNoZW5nMTk4Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)  
 


server.c




/*************************************************************************
> File Name: server.c
> Author: ma6174
> Mail: ma6174@163.com
> Created Time: Sat 04 Oct 2014 09:46:30 PM WST
************************************************************************/

#include “socket.h”

int UDPPORT = 4001;
#define SIZE 256

int main() {
int serverfd = -1;
char buf[SIZE];
char from_ip[SIZE];
int port, num;
if(UDPServerInit(UDPPORT, &serverfd) < 0) {
perror(“can init UDP server…!\n”);
exit(EXIT_FAILURE);
}
while(1) {
num = UDPRecv(serverfd, buf, SIZE, from_ip, &port);
if(num < 0) {
perror(“receving error…!\n”);
exit(EXIT_FAILURE);
}
buf[num] = ‘\0’;
printf(“You got a message %s from client …\n Its ip is %s, port is %d\n”, buf, from_ip, port);
if(!strcmp(buf, “bye”)) {
break;
}
// sleep(1);
}
UDPClose(serverfd);

return 0;

}


  
 Makefile 



CC=gcc
LIBRARY=…/lib
CFLAGS=-I$(LIBRARY)
CXXFLAGS=
OBJS1=server.o socket.o

all: server

server: $(OBJS1)
$(CC) -o $@ $(OBJS1)

socket.o: $(LIBRARY)/socket.c
$(CC) -c $(LIBRARY)/socket.c

clean:
rm *.o server > /dev/null 2>&1


  
 进入client 

![](https://img-blog.csdn.net/20141019112219927?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3poaWNoZW5nMTk4Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)  
 


client.c




/*************************************************************************
> File Name: client.c
> Author: ma6174
> Mail: ma6174@163.com
> Created Time: Sat 04 Oct 2014 09:46:30 PM WST
************************************************************************/

#include “socket.h”

#define SIZE 256
int UDPPORT = 4001;
const char *serveraddr = “127.0.0.1”;

int main() {
int clientfd = -1;
char buf[SIZE];
size_t num;
UDPClientInit(&clientfd);

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值