UDP发送与接受小软件的程序实现
网上有很多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发送与接受小软件的程序实现相关推荐
- python如何开发小软件-Python程序员,如何快速开发一个小程序
要点: 小程序是前后端分离的. 前端使用的是微信自定义的一套规范wxml+wxss+json+js,本质还是html+css+js. 后台可以选用任何你熟悉的语言:Java,Python,PHP,Ru ...
- 计算机网络课程设计,使用MFC实现界面化创建ARP发送与接受程序(一)
计算机网络课程设计,使用MFC实现界面化创建ARP发送与接受程序(一) 1.实验内容: 利用WinpCap开源库函数,编写程序实现ARP报文的发送和接收 2.实验要求: 利用WINPCAP给出的API ...
- iPhone测试软件偷开照相机,iphone小软件让小偷现形 自动拍下照片发送邮箱
iphone小软件让小偷现形 自动拍下照片发送邮箱 iPhone手机能防盗,还能抓小偷,你听说过吗? 前几天,网友"l6shaoxt"在网上曝光了好几张照片,说这就是偷了自己手机的 ...
- PPC关闭和切换程序小软件收集
系统软件-关闭和切换程序小软件收集 --HaaliTaskSwitcher小快灵.强烈推荐.原作者地址http://haali.cs.msu.ru/ppc/ 感谢智手n1958 (大虫子) 提供下载: ...
- 公众号发送文字或者小程序
公众号发送文字或者小程序 案例: <a href="http://mp.weixin.qq.com/s/YaK12221s5hBjus3i21"><Hi>& ...
- 操作系统实验:使用linux系统提供的系统调用msgget(),msgrev(),msgctl()编制一个长度为1K的消息发送和接受的程序
实验目的:了解和熟悉linux支持的消息通信机制. 任务:使用linux系统提供的系统调用msgget(),msgrev(),msgctl()编制一个长度为1K的消息发送和接受的程序. 实验要求: ( ...
- 通过微信公众号给npy发送天气的小程序
通过微信公众号给npy发送天气的小程序 操作步骤: 模仿抖音上的给女朋友发送天气的小程序 1.免费虚拟主机(自带域名) https://profreehost.com/ 3.微信公众号测试号平台(个人 ...
- java实现蓝牙通信程序_Android蓝牙通信聊天实现发送和接受功能
很不错的蓝牙通信demo实现发送和接受功能,就用了两个类就实现了,具体内容如下 说下思路把 主要有两个类主界面类和 蓝牙聊天服务类. 首先创建线程 实际上就是创建BluetoothChatServic ...
- C#/Csharp桌面应用开发小作业小程序,类似微信登录功能的小软件
(七) 微信APP是一款非常流行的及时通讯类应用软件,请利用所学的桌面应用开发知识,仿照完成一个类似微信登录功能的小软件,功能要求如下所示,最终效果见Demo文件夹: 软件需求及编码提示: 该软件 ...
最新文章
- Dockerfile 常用指令 - 每天5分钟玩转 Docker 容器技术(16)
- IT顾问成长分享沙龙
- 查看LINUX当前负载
- 【大数据技术】操作系统和Hadoop版本选择
- 简述回源原理和CDN常见多级缓存
- shell文本处理工具grep
- java list 遍历 remove_JAVA中LISt遍历时如何remove元素?
- 数据分析CSV模块的基本使用(以分析复杂的天气情况为例),附完整的Python代码及csv文件详解---数据可视化
- Json学习总结(3)——Jsonp跨域及Rest接口实现
- TCP协议三次握手/四次挥手
- CNN卷积神经网络总结
- LCD液晶屏驱动芯片分类百科
- Java笔记01——JAVA基础部分
- Connection Backoff Interop Test Descriptions
- 【日常问题解决】docker 映射端口出错
- 招聘网站代码模板 mysql_招聘网站爬虫模板
- Android练手小项目--仿72g赚吧App
- 带有分销体系的开源知识付费系统——cremb
- HTML自定义滚动条附效果图和完整源码
- 深入浅出pytorch