資源簡介
linux系統下建立多線程程序設計,完成UDP網絡通信的發送與接收,包括總結與源代碼,實測效果可見鏈接https://blog.csdn.net/zxp121127/article/details/78506081

代碼片段和文件信息
/*------------------------------------------------------------------------------------
*?@filename:?udpclient.c
*?@author??:?Zhou?Xiangping
*?@date????:?2-11-2017
*?@versions:?V0
*?@brief???:?linux系統下多線程網絡(udp)編程,實現udp發送與接收可以同時進行
-------------------------------------------------------------------------------------*/
#include
#include
#include//多線程
#include
#include
#include???
#include???
#include??//以太網?
#include??//以太網
#include?? //以太網
#include???
#include????
#include?
typedef?void*?(*fun)(void*);
static?pthread_mutex_t?mutex?=?PTHREAD_MUTEX_INITIALIZER;
static?pthread_cond_t?cond?=?PTHREAD_COND_INITIALIZER;
void*?udprecv(void*); //udp接收線程
pthread_t?udpc_id; ? //接收線程id
void*?udpsend(void*); //udp發送線程
pthread_t?udps_id;??? //發送線程id
#define?PORT?8081?? ? //設置端口號
#define?MAXDATASIZE?1024?? //最大接受/發送數據容量
char?ipaddr[16]?=?“192.168.211.4“;//回環調試模式
??//char?ipaddr[16]?=?“192.168.211.85“;//回環調試模式
int?sockfd?=?0;
int?sendCounter?=?0;
int?recvCounter?=?0;
int?sendflag?=?0;
/*------------------------------------------------------------------------------------
*?@filename:?Can1_Receive_Msg(unsigned?char?*buf)
*?@author??:?Zhou?Xiangping
*?@input???:?nothing
*?@return??:?nothing
*?@date????:?2-11-2017
*?@brief???:?在main函數中創建兩個線程:udpsend?and?udprecv,并確保udpsend比udprecv先運行(先初始化套接字!)
*?-------------------------------------------------------------------------------------*/
int?main(int?argc?char?*argv[])
{
printf(“the?program?is?run!\n“);
if?(argc?==?2)//在終端輸入服務器ip地址
{
while?(1)
{
if?(strlen(argv[1])?<=?15)
{
//ipaddr?=?argv[1];
strcpy(ipaddr?argv[1]);
break;
}
else?{
printf(“the?ipaddr?is?nonconformity!please?input?correct?ipaddr...\n“);
scanf(“%s“?argv[1]);
}
}
}
else?{
printf(“Use?the?default?ipaddr!\n“);
}
printf(“server?ipaddr?is:%s\n“?ipaddr);
int?rc1?=?0?rc2?=?0;
rc1?=?pthread_create(&udps_id?NULL?udpsend?NULL);//創建udp發送線程
if?(rc1?!=?0)
{
printf(“pthread?rc1?create?failure!\n“);
exit(EXIT_FAILURE);
}
sleep(1);
rc2?=?pthread_create(&udpc_id?NULL?udprecv?NULL);//創建udp接收線程
if?(rc2?!=?0)
{
printf(“pthread?rc2?create?failure!\n“);
exit(EXIT_FAILURE);
}
while?(1);
return?0;
}
/*------------------------------------------------------------------------------------
*?@filename:?void*?udpsend(void*?arg)
*?@author??:?Zhou?Xiangping
*?@input???:?nothing
*?@return??:?nothing
*?@date????:?2-11-2017
*?@brief???:?完成UDP網絡數據的發送(測試程序中需要手動輸入)
*?-------------------------------------------------------------------------------------*/
void*?udpsend(void*?arg)
{
char?sendbuf[MAXDATASIZE];
struct?hostent?*target; //目標設備ip地址
struct?sockaddr_in?server;//創建ipv4協議的網絡
target?=?gethostbyname(ipaddr);
if?((sockfd?=?socket(AF_INET?SOCK_DGRAM?0))?==?-1)//?創建套接字描述符
{
printf(“socket()?error\n“);
exit(1);
}
//初始化套接字
bzero(&server?si
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-11-11?13:07??linux多線程+UDP網絡通信\
?????文件??????441578??2017-11-11?13:07??linux多線程+UDP網絡通信\linux多線程+UDP網絡通信總結.pdf
?????文件???????14936??2017-11-09?08:19??linux多線程+UDP網絡通信\udpc
?????文件????????4766??2017-11-11?12:57??linux多線程+UDP網絡通信\udpclient.c
?????文件???????14688??2017-11-09?07:33??linux多線程+UDP網絡通信\udps
?????文件????????4947??2017-11-11?12:57??linux多線程+UDP網絡通信\udpserver.c
- 上一篇:CCMS通用內容管理系統 功能白皮書
- 下一篇:tdc-gp2的測試程序
評論
共有 條評論