C语言笔记-26-网络-UDP网络编程
文章目录
- C语言笔记-26-网络-UDP网络编程
- 前言
- 一、UDP编程模型概括
- 三、UDP编程模型代码
-
- 总结
前言
自学笔记,没有历史知识铺垫(省略百度部分)C语言笔记-26-网络-UDP网络编程
一、UDP编程模型概括
服务器端编程模型
socket()
创建socket设备,获取该设备的文件描述符 sfdbind()
将sfd与本地ip、端口绑定recvfrom()
阻塞等待客户端do Some...
处理客户端数据sendto()
将结果返回给客户端close()
关闭连接描述符,结束通讯
客户端编程模型
socket()
创建socket设备,获取该设备文件描述符 cfdsendto()
发送数据给服务器recvfrom()
阻塞接收服务器数据do Some...
处理服务器响应信息close()
关闭本次连接,结束通讯
三、UDP编程模型代码
UDP服务端
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
int main(int argc, char *argv[])
{
printf("服务器端启动中...\n");
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8089);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
int sfd = socket(PF_INET, SOCK_DGRAM, 0);
if (sfd == -1)
{
perror("创建socket设备失败");
}
int bindResult = bind(sfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if (bindResult == -1)
{
perror("绑定socket设备失败");
}
char buf[128];
while (1)
{
struct sockaddr rec_addr;
socklen_t len = sizeof(rec_addr);
int recvFromResult = recvfrom(sfd, buf, 128, 0, &rec_addr, &len);
if (recvFromResult == -1)
{
perror("阻塞等待客户端失败");
}
for (int i = 0; i < recvFromResult; i++)
{
buf[i] = toupper(buf[i]);
}
sendto(sfd, buf, recvFromResult, 0, &rec_addr, len);
close(recvFromResult);
}
return 0;
}
dony15$ ./server_socket
服务器端启动中...
UDP客户端
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char *msg = "Send Data abccc\n";
char buf[128];
printf("客户端启动中...\n");
struct sockaddr_in client_addr;
client_addr.sin_family = AF_INET;
client_addr.sin_port = htons(8089);
client_addr.sin_addr.s_addr = htonl(INADDR_ANY);
inet_pton(AF_INET, argv[1], &client_addr.sin_addr);
int cfd = socket(PF_INET, SOCK_DGRAM, 0);
if (cfd == -1)
{
perror("创建socket设备失败");
}
int sendtoResult = sendto(cfd, msg, strlen(msg) + 1, 0, (struct sockaddr *)&client_addr, sizeof(client_addr));
if (sendtoResult == -1)
{
perror("向服务器发送数据失败");
}
int recvFromResult = recvfrom(cfd, buf, 128, 0, NULL, NULL);
if (recvFromResult == -1)
{
perror("阻塞等待服务器返回数据失败");
}
write(1, buf, recvFromResult);
close(cfd);
printf("\n客户端运行结束\n");
return 0;
}
dony15$ ./client_socket 127.0.0.1
客户端启动中...
SEND DATA ABCCC
客户端运行结束
总结
本章主要为C语言笔记-26-网络-UDP网络编程
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)