/*

server

编译命令: gcc -Wall -g -o server -lpthread

*/

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

#define PORT 8458

void udp_recv(int fd)
{
 char strRecv[1024] = {"\0"};
 int iRecvLen = -1,iSize;
 struct sockaddr_in cli;
 
 iSize = sizeof(cli);

while(1)
 {

memset(strRecv,0x00,sizeof(strRecv));
  iRecvLen = recvfrom(fd,strRecv,sizeof(strRecv),0,(struct sockaddr *)&cli,&iSize);
  //strRecv[iRecvLen] = '\0';
  
  if (strlen(strRecv) > 0)
  {
   printf("RecvLen:%d,context:%s\n",iRecvLen,strRecv);
  }
 }

return ; 
}

int main()
{
 struct sockaddr_in SerAddr;
 int serfd = -1,iSize = -1;
 
 iSize = sizeof(SerAddr);
 serfd = socket(PF_INET,SOCK_DGRAM,0);
 if (0 > serfd)
 {
  printf("init socket failed:%d\n",serfd);
  return 0;
 }
 memset(&(SerAddr),0x00,sizeof(struct sockaddr_in));

SerAddr.sin_family = AF_INET;
 SerAddr.sin_port = htons(PORT);
 SerAddr.sin_addr.s_addr = htonl(INADDR_ANY);

if ( 0  > bind(serfd,(struct sockaddr *)&SerAddr,iSize))
 {
  printf("server bind  to port %d failed \n",PORT);
  return 0;
 }

udp_recv(serfd);
 
 return 0;
}

/*

client

编译命令: gcc -Wall -g -o client -lpthread

*/

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

void udp_send(int udpfd)
{
 int i = 0,iSerPort = 8458,iSize = 0;;
 char buf[128] = {"\0"},sIP[64] = {"127.0.0.1"};
 int iLen = 128;
 struct sockaddr_in peer;
 
 iSize = sizeof(peer);
 
 for (i = 0; i < 10; i++)
 {
  bzero((char *)&peer,sizeof(struct sockaddr_in));  
  peer.sin_family = AF_INET;
  peer.sin_port = htons(iSerPort);
  peer.sin_addr.s_addr = inet_addr(sIP);

memset(buf,0x00,sizeof(buf));
  sprintf(buf,"string%d-string%d-string%d-string%d-string%d",i + 1,i + 1,i + 1,i + 1,i + 1);
  printf("send message:%s\n",buf);
  iLen = sendto(udpfd,buf,strlen(buf) + 1,0,(struct sockaddr *)&peer,iSize);
  if ( 0 > iLen)
  {
   printf("send failed\n");
  }
  
 }
 
 return;
}

int  main()
{
 struct sockaddr_in SerAddr;
 int udpfd = -1,iPort = 8456;

udpfd = socket(AF_INET,SOCK_DGRAM,0);
 
 if(udpfd < 0)
 {
  printf("socket error:%s\n",strerror(errno));
  return -1;
 }
 
 
 memset(&(SerAddr),0x00,sizeof(SerAddr));

SerAddr.sin_family = AF_INET;
 SerAddr.sin_port = htons(iPort);
 SerAddr.sin_addr.s_addr = htonl(INADDR_ANY);

if ( 0 > bind(udpfd,(struct sockaddr *)&SerAddr,sizeof(struct sockaddr)) )
 {
  printf("bind failed:%s\n",strerror(errno));
  return -1;
 }
 
 udp_send(udpfd);
 printf("\nclient exit!\n\n");
 return 0;
}

转载于:https://blog.51cto.com/jeyochen/506452

linux下udp多线程编程相关推荐

  1. Linux下的多线程编程

    1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process ...

  2. Linux下不使用qt自带sleep,Linux下Qt多线程编程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 作者:武汉华嵌嵌入式培训中心 技术部 以下和大家分享Linux平台下Qt两种多线程编程的方式: 1.使用Linux平台下的线程函数.以下是给出的代码片段: ...

  3. 【转】Linux下的多线程编程背景知识

    1. 进程和线程 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的 Unix也支持线程的概念,但是在一个进程(pr ...

  4. Linux下C++多线程编程(入门实例)

    C++ 多线程 多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序.一般情况下,两种类型的多任务处理:基于进程和基于线程. 基于进程的多任务处理是程序的并发执行. 基于 ...

  5. linux 线程_Linux 多线程编程(不限Linux)

    前言 线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步.互斥,这些东西将在本文中介绍.我在某QQ群里见到这样一道面试题: 是否熟 ...

  6. linux的UDP通信编程

    这篇文章将对linux下udp socket编程重要知识点进行总结,无论是开发人员应知应会的,还是说udp socket的一些偏僻知识点,本文都会讲到.尽可能做到,读了一篇文章之后,大家对udp so ...

  7. [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)

    本文可任意转载,但必须注明作者和出处. [原创]手把手教你Linux下的多线程设计(一)                                       --Linux下多线程编程详解 原 ...

  8. Linux下高级C编程(学习总结)

    Linux下高级C编程 第一章 unix/linux系统的基本概念 第二章 unix/linux系统下的编程基础和开发方式 第三章 unix/linux系统下的内存管理 第四章 unix/linux系 ...

  9. Linux下的C编程实战

    Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linu ...

最新文章

  1. 语言中如何在main函数开始前执行函数
  2. NLP之TM之LDA:利用LDA算法瞬时掌握文档的主题内容—利用希拉里邮件数据集训练LDA模型并对新文本进行主题分类
  3. 【☘️C语言の单链表是否有环问题☘️】
  4. Linux C :系统调用-fork,wait,subreaper
  5. luogu P1880 [NOI1995]石子合并
  6. libSVM分类小例C++
  7. ZBlog插件简洁轻巧的编辑器 iceEditor修复版
  8. matlab实现获取tof,一种结合TOF技术和双目视觉的深度信息获取装置及其方法与流程...
  9. php yii 海报,php – 找不到Yii2主题集成图像
  10. 用html+css+js实现一个无限级树形控件
  11. 枚举类型的定义和应用
  12. otool 与dylib
  13. SAP license key developer access key
  14. Epub格式电子书格式
  15. 高光谱知识(1)-高光谱成像技术的理解
  16. vue删除数据,不刷新页面
  17. 使用rcedit修改exe文件信息(图标、版本、版权等)
  18. Android实现button一边圆角一边直角
  19. Arduino控制数码管显示,亮度,冒号,字符(四段共阳)
  20. Imagery in Action | Week3 无人机数据

热门文章

  1. spring事务的传播性的理解
  2. 发现读纸质媒介比电子媒介的乐趣大多了
  3. SQL Server 2005中的SQLCMD工具使用
  4. Maven自学日志01---安装
  5. pulsar的bookie服务变更journal或者ledger数据盘操作导向
  6. python的类里的属性是否可以为列表_是否有Python方法可以访问类的所有非私有和非内置属性?...
  7. Java定时器Timer学习之一
  8. nginx unit
  9. maven中ssm框架快速搭建
  10. 北京高院宣判:微信商标案终审驳回上诉 维持原判