linux下udp多线程编程
/*
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多线程编程相关推荐
- Linux下的多线程编程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process ...
- Linux下不使用qt自带sleep,Linux下Qt多线程编程
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 作者:武汉华嵌嵌入式培训中心 技术部 以下和大家分享Linux平台下Qt两种多线程编程的方式: 1.使用Linux平台下的线程函数.以下是给出的代码片段: ...
- 【转】Linux下的多线程编程背景知识
1. 进程和线程 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的 Unix也支持线程的概念,但是在一个进程(pr ...
- Linux下C++多线程编程(入门实例)
C++ 多线程 多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序.一般情况下,两种类型的多任务处理:基于进程和基于线程. 基于进程的多任务处理是程序的并发执行. 基于 ...
- linux 线程_Linux 多线程编程(不限Linux)
前言 线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步.互斥,这些东西将在本文中介绍.我在某QQ群里见到这样一道面试题: 是否熟 ...
- linux的UDP通信编程
这篇文章将对linux下udp socket编程重要知识点进行总结,无论是开发人员应知应会的,还是说udp socket的一些偏僻知识点,本文都会讲到.尽可能做到,读了一篇文章之后,大家对udp so ...
- [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)
本文可任意转载,但必须注明作者和出处. [原创]手把手教你Linux下的多线程设计(一) --Linux下多线程编程详解 原 ...
- Linux下高级C编程(学习总结)
Linux下高级C编程 第一章 unix/linux系统的基本概念 第二章 unix/linux系统下的编程基础和开发方式 第三章 unix/linux系统下的内存管理 第四章 unix/linux系 ...
- Linux下的C编程实战
Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来, Linu ...
最新文章
- 语言中如何在main函数开始前执行函数
- NLP之TM之LDA:利用LDA算法瞬时掌握文档的主题内容—利用希拉里邮件数据集训练LDA模型并对新文本进行主题分类
- 【☘️C语言の单链表是否有环问题☘️】
- Linux C :系统调用-fork,wait,subreaper
- luogu P1880 [NOI1995]石子合并
- libSVM分类小例C++
- ZBlog插件简洁轻巧的编辑器 iceEditor修复版
- matlab实现获取tof,一种结合TOF技术和双目视觉的深度信息获取装置及其方法与流程...
- php yii 海报,php – 找不到Yii2主题集成图像
- 用html+css+js实现一个无限级树形控件
- 枚举类型的定义和应用
- otool 与dylib
- SAP license key developer access key
- Epub格式电子书格式
- 高光谱知识(1)-高光谱成像技术的理解
- vue删除数据,不刷新页面
- 使用rcedit修改exe文件信息(图标、版本、版权等)
- Android实现button一边圆角一边直角
- Arduino控制数码管显示,亮度,冒号,字符(四段共阳)
- Imagery in Action | Week3 无人机数据