网上有很多c实现的udp发送和接收的控制台小程序,可以同时发送和接收udp包并在标准输出打印。由于工作需要自己写了一个实现的小程序。可以绑定本地端口号向远程主机发送udp包。同时可以接受任意主机发送来的udp包。在UBUNTU 16.4上亲测有效。程序中将ip地址和端口号用宏来写,需要改一次ip和端口号就编译一次。当然也可以设计成利用argc和argv命令行传参的形式。

#include <sys/types.h>

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

#define UDP_TEST_PORT 8080 /*我的远程主机端口号*/
#define UDP_TEST_PORT_CLIENT 60010 /*我的本地端口号*/
#define UDP_SERVER_IP "10.10.10.207" /*我的远程主机ip*/
#define UDP_SERVER_IP_CLIENT "10.10.10.202" /*我的 本地ip */

/*新线程接受udp包*/
void *msg_recv(void * arg)

{

char buffer1[256];

while(1) {
                bzero(buffer1, sizeof(buffer1));
                /* 接收远程主机返回的字符串*/
                recvfrom(sockfd, buffer1, sizeof(buffer1), 0, (struct sockaddr *)&addr, &addr_len);

printf("Received a string from  %s : port%d, string is: %s\n", inet_ntoa(addr.sin_addr),

ntohs(addr.sin_port),buffer1);

}
        return (void *)0;
}

int main(int argc, char* argv[])
{
        struct sockaddr_in addrclient;
        int len = 0;
        char buffer[256];
        pthread_t recvid;

/* 建立socket,注意必须是SOCK_DGRAM */
        if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
                perror("socket");
                exit(1);
        }

/* 填写sockaddr_in*/
        bzero(&addr, sizeof(addr));
        addr.sin_family = AF_INET;
        addr.sin_port = htons(UDP_TEST_PORT);
        addr.sin_addr.s_addr = inet_addr(UDP_SERVER_IP);

/* 填写sockaddr_in*/
        bzero(&addrclient, sizeof(addrclient));
        addrclient.sin_family = AF_INET;
        addrclient.sin_port = htons(UDP_TEST_PORT_CLIENT);
        addrclient.sin_addr.s_addr = inet_addr(UDP_SERVER_IP_CLIENT);

/*绑定本地ip和端口*/
        if (bind(sockfd, (struct sockaddr *)&addrclient, sizeof(addrclient))<0) {
                perror("connect");
                exit(1);
        }

/*抛出新线程用于接受udp包*/
        if (pthread_create(&recvid, NULL, (void *)msg_recv, NULL) != 0){
                printf("Pthread_create for receiving message error!\n");
                return -1;
        }

while(1) {
                bzero(buffer, sizeof(buffer));
                printf("Please enter a string to send to server: \n");
                /* 从标准输入设备取得字符串*/
                len = read(STDIN_FILENO, buffer, sizeof(buffer));
                /* 将字符串传送远程主机端*/
                sendto(sockfd, buffer, len, 0, (struct sockaddr *)&addr, addr_len);
        }
        pthread_join(recvid, NULL);
        return 0;
}

// ----------------------------------------------------------------------------
// End of myudp_assist.c

UDP发送与接受小软件的程序实现相关推荐

  1. python如何开发小软件-Python程序员,如何快速开发一个小程序

    要点: 小程序是前后端分离的. 前端使用的是微信自定义的一套规范wxml+wxss+json+js,本质还是html+css+js. 后台可以选用任何你熟悉的语言:Java,Python,PHP,Ru ...

  2. 计算机网络课程设计,使用MFC实现界面化创建ARP发送与接受程序(一)

    计算机网络课程设计,使用MFC实现界面化创建ARP发送与接受程序(一) 1.实验内容: 利用WinpCap开源库函数,编写程序实现ARP报文的发送和接收 2.实验要求: 利用WINPCAP给出的API ...

  3. iPhone测试软件偷开照相机,iphone小软件让小偷现形 自动拍下照片发送邮箱

    iphone小软件让小偷现形 自动拍下照片发送邮箱 iPhone手机能防盗,还能抓小偷,你听说过吗? 前几天,网友"l6shaoxt"在网上曝光了好几张照片,说这就是偷了自己手机的 ...

  4. PPC关闭和切换程序小软件收集

    系统软件-关闭和切换程序小软件收集 --HaaliTaskSwitcher小快灵.强烈推荐.原作者地址http://haali.cs.msu.ru/ppc/ 感谢智手n1958 (大虫子) 提供下载: ...

  5. 公众号发送文字或者小程序

    公众号发送文字或者小程序 案例: <a href="http://mp.weixin.qq.com/s/YaK12221s5hBjus3i21"><Hi>& ...

  6. 操作系统实验:使用linux系统提供的系统调用msgget(),msgrev(),msgctl()编制一个长度为1K的消息发送和接受的程序

    实验目的:了解和熟悉linux支持的消息通信机制. 任务:使用linux系统提供的系统调用msgget(),msgrev(),msgctl()编制一个长度为1K的消息发送和接受的程序. 实验要求: ( ...

  7. 通过微信公众号给npy发送天气的小程序

    通过微信公众号给npy发送天气的小程序 操作步骤: 模仿抖音上的给女朋友发送天气的小程序 1.免费虚拟主机(自带域名) https://profreehost.com/ 3.微信公众号测试号平台(个人 ...

  8. java实现蓝牙通信程序_Android蓝牙通信聊天实现发送和接受功能

    很不错的蓝牙通信demo实现发送和接受功能,就用了两个类就实现了,具体内容如下 说下思路把 主要有两个类主界面类和 蓝牙聊天服务类. 首先创建线程 实际上就是创建BluetoothChatServic ...

  9. C#/Csharp桌面应用开发小作业小程序,类似微信登录功能的小软件

    (七) 微信APP是一款非常流行的及时通讯类应用软件,请利用所学的桌面应用开发知识,仿照完成一个类似微信登录功能的小软件,功能要求如下所示,最终效果见Demo文件夹: 软件需求及编码提示:  该软件 ...

最新文章

  1. Dockerfile 常用指令 - 每天5分钟玩转 Docker 容器技术(16)
  2. IT顾问成长分享沙龙
  3. 查看LINUX当前负载
  4. 【大数据技术】操作系统和Hadoop版本选择
  5. 简述回源原理和CDN常见多级缓存
  6. shell文本处理工具grep
  7. java list 遍历 remove_JAVA中LISt遍历时如何remove元素?
  8. 数据分析CSV模块的基本使用(以分析复杂的天气情况为例),附完整的Python代码及csv文件详解---数据可视化
  9. Json学习总结(3)——Jsonp跨域及Rest接口实现
  10. TCP协议三次握手/四次挥手
  11. CNN卷积神经网络总结
  12. LCD液晶屏驱动芯片分类百科
  13. Java笔记01——JAVA基础部分
  14. Connection Backoff Interop Test Descriptions
  15. 【日常问题解决】docker 映射端口出错
  16. 招聘网站代码模板 mysql_招聘网站爬虫模板
  17. Android练手小项目--仿72g赚吧App
  18. 带有分销体系的开源知识付费系统——cremb
  19. HTML自定义滚动条附效果图和完整源码
  20. 深入浅出pytorch

热门文章

  1. 数据结构-day2-栈(先进后出)和队列(先进先出)-C/C++
  2. 你过得不好,内向不背这个黑锅
  3. 怎么升级鸿蒙手机,华为手机怎么升级鸿蒙?华为鸿蒙系统支持手机型号大全
  4. Ceph集群修改IP地址
  5. node-xlsx操作excel
  6. node-xlsx - 简单几行代码处理导入、导出 excel 表格数据,免费开源的 javascript 工具库
  7. 极米h3s投影仪参数 极米 H3S 投影仪评测 怎么样
  8. opencv学习笔记七:绘图和注释
  9. 提交微信小程序的项目为线上版本
  10. Python项目实战:爬起7160清纯校花图库