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;
}
本文来自博客园,作者:Athenavi,转载请注明原文链接:https://www.cnblogs.com/Athenavi/articles/16996648.html

浙公网安备 33010602011771号