您的位置:首页 > 理论基础 > 计算机网络

linux网络通信之udp

2017-03-24 20:13 239 查看

客户端

/*************************************************************************
> File Name: client.c
> Author: 联合作战实验室
> Mail: v.manstein@qq.com
> Created Time: Thu 23 Mar 2017 11:11:10 AM CST
************************************************************************/

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>

int main(int argc, const char* argv[])
{
int sockfd;
struct sockaddr_in sockaddr; // 网络通信结构:包含ip和端口号
char buf[128] = {};
int len = sizeof(struct sockaddr);
// 建立通信套接字
if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket error");
exit(-1);
}
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = inet_addr(argv[1]);
sockaddr.sin_port = htons(atoi(argv[2]));
while(1) {
printf("Input: ");
fgets(buf, 128, stdin);
sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&sockaddr, len);// 直接向目标ip和端口号的地址发消息

}
}


服务器

/*************************************************************************
> File Name: server.c
> Author: 联合作战实验室
> Mail: v.manstein@qq.com
> Created Time: Thu 23 Mar 2017 11:11:10 AM CST
************************************************************************/

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<string.h>

int main(int argc, const char* argv[])
{
int sockfd;
struct sockaddr_in servaddr, clientaddr; // 实例化网络通信结构体对象
char buf[128] = {};
int len = sizeof(struct sockaddr);
// 创建socket
if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket error");
exit(-1);
}
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr(argv[1]);
servaddr.sin_port = htons(atoi(argv[2]));
// 绑定通信结构体和socket
if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
{
perror("bind");
exit(1);

}
while(1) {
recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&clientaddr, &len); // 接收客户端消息
printf("roger: -> %s %d", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));
printf("recvfrom client: %s\n", buf);
memset(buf, 0, sizeof(buf));
strcpy(buf, "ok form server");
sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&clientaddr, len); // 向客户端发送消息
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  udp 网络 linux