基于UDP套接字编程实例
2024-08-28 12:25:07
data.h
#ifndef DATA_H
#define DATA_H
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#define PORT 4578
#define maxn 100 #endif
server.c
#include "data.h"
int main()
{
int sockfd;
struct sockaddr_in server;
struct sockaddr_in client;
socklen_t len;
int num;
char buf[maxn];
if((sockfd = socket(AF_INET,SOCK_DGRAM,)) == -)
{
fprintf(stderr,"socket fail,error:%s\n",strerror(errno));
return -;
}
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sockfd,(struct sockaddr*)&server,sizeof(server)) == -)
{
fprintf(stderr,"bind fail,error:%s\n",strerror(errno));
return -;
}
len = sizeof(client);
bzero(&buf,sizeof(buf));
while()
{
num = recvfrom(sockfd,buf,maxn,,(struct sockaddr*)&client,&len);
if(num < )
{
perror("recvfrom() error!\n");
exit();
}
num--;
buf[num] = '\0';
printf("You got a message <%s> from client.\n",buf);
printf("It is ip is %s,port is %d.\n",
inet_ntoa(client.sin_addr), htons(client.sin_port));
sendto(sockfd,buf,strlen(buf),,(struct sockaddr*)&client,len);
if(!strcmp(buf,"bye"))
break;
}
close(sockfd); }
client.c
#include "data.h"
int main()
{
int sockfd,num;
char sendbuf[maxn];
char recvbuf[maxn];
struct sockaddr_in server;
struct sockaddr_in peer;
if((sockfd = socket(AF_INET,SOCK_DGRAM,)) == -)
{
fprintf(stderr,"socket fail,error %s\n",strerror(errno));
exit();
}
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(PORT);
server.sin_addr.s_addr = inet_addr("127.0.0.1");
bzero(&sendbuf,sizeof(sendbuf));
bzero(&recvbuf,sizeof(recvbuf));
while(fgets(sendbuf,sizeof(sendbuf),stdin) != NULL)
{
int tt = strlen(sendbuf);
sendto(sockfd,sendbuf,tt,,(struct sockaddr*)&server,sizeof(server));
socklen_t len;
recvfrom(sockfd,recvbuf,maxn,,NULL,NULL);
printf("receive message is :");
fputs(recvbuf,stdout);
printf("\n");
bzero(&sendbuf,sizeof(sendbuf));
bzero(&recvbuf,sizeof(recvbuf));
}
close(sockfd);
return ;
}
运行结果:
最新文章
- boost常用记录
- Using the Cordova Camera API
- PHP自定义函数使用外部变量
- 转 DevExpress-ASPxPageControl 动态添加 TabPage 内容
- isset(), empty()
- 一个简单的RTTI实现
- 对于面向对象的理解(JAVA)
- Python模块:paramiko
- 通过邮件找回密码功能的Java实现
- 《剑指offer(第二版)》面试题60——n个骰子的点数
- bzoj3991 LCA + set
- 新兴的API(fileReader、geolocation、web计时、web worker)
- emWin 工程之汉字显示
- Java基础加强总结(三)——代理(Proxy)
- Eclipse 中 Could not find *.apk的解决方案
- vue.js 源代码学习笔记 ----- codegen.js
- iOS各种profile文件
- 绘图驱动-OSD原理1
- Nginx简介及使用Nginx实现负载均衡的原理【通俗易懂,言简意赅】【转】
- 条款49:了解new-handle行为
热门文章
- mybatis的Mapper代理原理
- linux 小技巧
- Linux环境下用Weblogic发布项目【二】 -- 配置Domain域
- Hadoop Yarn事件处理框架源码分析
- Foxmail安装和登录
- dbms_output.put与put_line
- 问题BeanFactory not initialized or already closed - call &#39;refresh&#39; before access
- 洛谷P2860 [USACO06JAN]冗余路径Redundant Paths
- CAS单点登录原理
- RabbitMQ与Spring集成