UDP_Sever&Client连接的创建

UDP Server连接客户端

//UDP Server
#include <cstdio>
#include <string.h>
#include <string>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <iostream>

#define BUF_SIZE 512
void error_handing(const char* message) {
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(-1);

};

int UDPecho(int argc, char* argv[]) {
    int serv_sock=-1;//套接字
    char message[BUF_SIZE]="";//缓冲区
    int str_len;//字符串长度 消息
    socklen_t clnt_adr_sz;//客户端 套接字地址
    

struct sockaddr_in serv_adr, clnt_adr;//服务器与客户端的地址

if (argc!=2)
{
    printf("Usage: %s<port>\n", argv[0]);
    error_handing("argement is error");
    exit(1);
}
serv_sock = socket(PF_INET, SOCK_DGRAM, 0);

if (serv_sock==-1)
{
    error_handing("UDP socket creating error");
}

memset(&serv_adr, 0, sizeof(serv_adr));//
serv_adr.sin_family = AF_INET;//协议
serv_adr.sin_addr.s_addr = htonl(INADDR_ANY);//地址
serv_adr.sin_port = htons((short)atoi(argv[1]));//端口

if (bind(serv_sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr))==-1)
{
    error_handing("bind error");
}

for (int i = 0; i < 10;i++) {
    clnt_adr_sz = sizeof(clnt_adr);
    str_len = recvfrom(serv_sock, message, BUF_SIZE, 0, (struct sockaddr*)&clnt_adr, &clnt_adr_sz);
    sendto(serv_sock,message,str_len,0, (struct sockaddr*)&clnt_adr, clnt_adr_sz);
}
close(serv_sock);
return 0;

}

UDP Client

//客户端
int UDPclient(int argc, char* argv[]) {
    //初始化
    int client_sock;
    struct sockaddr_in serv_addr;
    char message[BUF_SIZE] = "";
    socklen_t serv_len = sizeof(serv_addr);
    if (argc != 3) {
        printf("Usage: %s IP Port\n", argv[0]);
        error_handing("argement error!");
    }

client_sock = socket(PF_INET, SOCK_DGRAM, 0);
if (client_sock==-1)
{
    error_handing("creating error!");
}

memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
serv_addr.sin_port = htons((short)atoi(argv[2]));
//
while (1) {
    printf("INPUT MESSAGE(q to Quit)");
    scanf("%s", message);
    if (strcmp(message, "q\n") == 0 || strcmp(message, "Q\n") == 0)
    {
        break;
    }
    
    sendto(client_sock, message, strlen(message), 0, (sockaddr*)&serv_addr, serv_len);
    memset(message, 0,serv_len);//qingli
    recvfrom(client_sock, message, strlen(message), 0, (sockaddr*)&serv_addr, &serv_len);

}
close(client_sock);
return 0;

}


posted @ 2022-12-21 17:00  Athenavi  阅读(27)  评论(0)    收藏  举报