最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux中使用C語言實現(xiàn)基于UDP協(xié)議的Socket通信示例

 更新時間:2016年03月22日 18:03:36   作者:hncdsun  
這篇文章主要介紹了Linux中使用C語言實現(xiàn)基于UDP協(xié)議的socket通信示例,服務器端與客戶端的功能都非?;A(chǔ),需要的朋友可以參考下

linux下udp服務器端源碼示例:

#include <errno.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <stdlib.h> 
#include <string.h> 
#include <netinet/in.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
 
int main(int argc, char **argv) 
{ 
 printf("server ip: %s/n", argv[1]); 
 printf("server port: %s/n", argv[2]); 
 
 printf("/n service starting.../n/n"); 
 int  socketFd; 
 struct sockaddr_in svrAddr; 
 struct sockaddr_in localAddr; 
 
 socketFd = socket (AF_INET, SOCK_DGRAM, 0); 
 if ( -1 == socketFd ) 
 { 
  perror( "socket:" ); 
  exit(-1); 
 } 
 
 // 設(shè)置地址可復用 
 int option = 1; 
 setsockopt( socketFd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option) ); 
 // 客戶端IP 
 memset(&localAddr, 0, sizeof(localAddr)); 
 localAddr.sin_family = AF_INET; 
 localAddr.sin_addr.s_addr = inet_addr( argv[1]); 
 localAddr.sin_port = htons (atoi(argv[2])); 
 
 int bindResult = bind(socketFd, (struct sockaddr *) &localAddr, sizeof(localAddr)); 
 if ( -1 == bindResult ) 
 { 
  perror( "bind:" ); 
  close(socketFd); 
  exit(-1); 
 } 
 
 // 服務器IP 
 memset(&svrAddr, 0, sizeof(svrAddr)); 
 svrAddr.sin_family = AF_INET; 
 svrAddr.sin_addr.s_addr = inet_addr( argv[1]); 
 svrAddr.sin_port = htons (atoi(argv[2])); 
 char tempBuff[2048] = {0}; 
 
 for ( ; ; ) 
 { 
  // 接收數(shù)據(jù) 
  struct sockaddr_in fromAddr; 
  memset((char *)&fromAddr, 0, (int)sizeof(fromAddr)); 
  socklen_t fromLen = sizeof(fromAddr); 
  ssize_t result = recvfrom( socketFd, tempBuff, sizeof(tempBuff), 0, (struct sockaddr *)&fromAddr, &fromLen);  
  if ( -1 == result ) 
  { 
   perror("recvfrom:"); 
   continue; 
  } 
  else 
  { 
   printf( "recv data %s successed. data len: %d/n", inet_ntoa(fromAddr.sin_addr), result ); 
   printf( "data:/n"); 
   for ( int i = 0; i < result; i++ ) 
   { 
    printf( "%02x ", tempBuff[i] ); 
    if ( (i+1)%16 == 0 ) 
    { 
     printf( "/n" ); 
    } 
   } 
   printf( "/n" ); 
  } 
   
  // 發(fā)送數(shù)據(jù) 
  result = sendto( socketFd, tempBuff, result, 0, (struct sockaddr*)&fromAddr, sizeof(fromAddr)); 
  if ( -1 == result ) 
  { 
   perror("sendto:"); 
  } 
  else 
  { 
   printf("send data success. data len:%d/n", result ); 
  }   
  sleep( 60 ); 
 } 
 close(socketFd); 
} 

linux下udp客戶端源碼示例:

#include <errno.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <stdlib.h> 
#include <string.h> 
#include <netinet/in.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
 
typedef struct _NSS_HEADER 
{ 
 unsigned short   ProtocolVersion;  /* 協(xié)議版本信息 */ 
 unsigned short   MsgType;    /* 消息類型 */ 
 unsigned short   TransactionNo;   /* 傳輸編號 */ 
 unsigned short   PacketLength;   /* 數(shù)據(jù)包長度,包括Header */ 
}NSS_HEADER; 
 
int main(int argc, char **argv) 
{ 
 printf("client ip: %s/n", argv[1]); 
 printf("client port: %s/n", argv[2]); 
 printf("server ip: %s/n", argv[3]); 
 printf("server port: %s/n", argv[4]); 
 
 printf("/n service starting.../n/n"); 
 int  socketFd; 
 struct sockaddr_in svrAddr; 
 struct sockaddr_in localAddr; 
 
 socketFd = socket (AF_INET, SOCK_DGRAM, 0); 
 if ( -1 == socketFd ) 
 { 
  perror( "socket:" ); 
  exit(-1); 
 } 
 
 // 設(shè)置地址可復用 
 int option = 1; 
 setsockopt( socketFd, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option) ); 
 // 客戶端IP 
 memset(&localAddr, 0, sizeof(localAddr)); 
 localAddr.sin_family = AF_INET; 
 localAddr.sin_addr.s_addr = inet_addr( argv[1]); 
 localAddr.sin_port = htons (atoi(argv[2])); 
 
 int bindResult = bind(socketFd, (struct sockaddr *) &localAddr, sizeof(localAddr)); 
 if ( -1 == bindResult ) 
 { 
  perror( "bind:" ); 
  sleep(10); 
  close(socketFd); 
  exit(-1); 
 } 
 
 // 服務器IP 
 memset(&svrAddr, 0, sizeof(svrAddr)); 
 svrAddr.sin_family = AF_INET; 
 svrAddr.sin_addr.s_addr = inet_addr( argv[3]); 
 svrAddr.sin_port = htons (atoi(argv[4])); 
 char tempBuff[2048] = {0}; 
 
 // 每分鐘發(fā)送一次數(shù)據(jù) 
 NSS_HEADER hdr; 
 memset( &hdr, 0, sizeof(NSS_HEADER)); 
 for ( ; ; ) 
 { 
  // 發(fā)送數(shù)據(jù) 
  hdr.TransactionNo++; 
  ssize_t result = sendto( socketFd, &hdr, sizeof(NSS_HEADER), 0, (struct sockaddr*)&svrAddr, sizeof(svrAddr)); 
  if ( -1 == result ) 
  { 
   perror("sendto:"); 
  } 
  else 
  { 
   printf("send data success. data len:%d/n", result ); 
  } 
 
  // 接收數(shù)據(jù) 
  struct sockaddr_in fromAddr; 
  memset((char *)&fromAddr, 0, (int)sizeof(fromAddr)); 
  socklen_t fromLen = sizeof(fromAddr); 
  result = recvfrom( socketFd, tempBuff, sizeof(tempBuff), 0, (struct sockaddr *)&fromAddr, &fromLen);  
  if ( -1 == result ) 
  { 
   perror("recvfrom:"); 
  } 
  else 
  { 
   printf( "recv data %s successed. data len: %d/n", inet_ntoa(fromAddr.sin_addr), result ); 
   printf( "data:/n"); 
   for ( int i = 0; i < result; i++ ) 
   { 
    printf( "%02x ", tempBuff[i] ); 
    if ( (i+1)%16 == 0 ) 
    { 
     printf( "/n" ); 
    } 
   } 
   printf("/n"); 
  } 
  sleep( 60 ); 
 } 
 close(socketFd); 
} 

相關(guān)文章

  • Qt讀取和寫入配置(ini)文件

    Qt讀取和寫入配置(ini)文件

    ini文件在windows系統(tǒng)中可以存儲需要持久保存的配置信息,本文主要介紹了Qt讀取和寫入配置(ini)文件,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 基于C語言實現(xiàn)靜態(tài)通訊錄的示例代碼

    基于C語言實現(xiàn)靜態(tài)通訊錄的示例代碼

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)一個簡單的靜態(tài)通訊錄,文中的示例代碼講解詳細,對我們學習C語言有一定幫助,需要的可以參考一下
    2022-07-07
  • C++實現(xiàn)圖的鄰接表存儲和廣度優(yōu)先遍歷實例分析

    C++實現(xiàn)圖的鄰接表存儲和廣度優(yōu)先遍歷實例分析

    這篇文章主要介紹了C++實現(xiàn)圖的鄰接表存儲和廣度優(yōu)先遍歷,實例分析了C++實現(xiàn)圖的存儲與遍歷技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C++ boost scoped_ptr智能指針詳解

    C++ boost scoped_ptr智能指針詳解

    智能指針是一種像指針的C++對象,但它能夠在對象不使用的時候自己銷毀掉。雖然STL提供了auto_ptr,但是由于不能同容器一起使用(不支持拷貝和賦值操作),因此很少有人使用。它是Boost各組件中,應用最為廣泛的一個
    2022-11-11
  • C語言中的盜賊(小偷)問題詳解

    C語言中的盜賊(小偷)問題詳解

    大家好,本篇文章主要講的是C語言中的盜賊(小偷)問題詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++中map和set的使用詳細攻略

    C++中map和set的使用詳細攻略

    set set是一種關(guān)聯(lián)式容器,下面這篇文章主要給大家介紹了關(guān)于C++中map和set使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友可以參考下
    2023-02-02
  • C++鏈式二叉樹深入分析

    C++鏈式二叉樹深入分析

    二叉樹的鏈式存儲結(jié)構(gòu)是指,用鏈表來表示一棵二叉樹,即用鏈來指示元素的邏輯關(guān)系。通常的方法是鏈表中每個結(jié)點由三個域組成,數(shù)據(jù)域和左右指針域,左右指針分別用來給出該結(jié)點左孩子和右孩子所在的鏈結(jié)點的存儲地址
    2022-06-06
  • OpenCV實現(xiàn)幀間差分法詳解

    OpenCV實現(xiàn)幀間差分法詳解

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)幀間差分法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言將日期、時間保存到文本文件中的方法

    C語言將日期、時間保存到文本文件中的方法

    這篇文章主要給大家介紹了關(guān)于C語言將日期、時間保存到文本文件中的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C語言具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • Qt5多線程編程的實現(xiàn)

    Qt5多線程編程的實現(xiàn)

    Qt通過三種形式提供了對線程的支持,本文主要介紹了Qt5多線程編程的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

抚宁县| 富裕县| 炎陵县| 邵阳市| 利津县| 定安县| 鸡泽县| 阿勒泰市| 城步| 谢通门县| 赤城县| 晋城| 临朐县| 合水县| 白玉县| 台中市| 甘洛县| 稷山县| 盖州市| 呈贡县| 桓仁| 秦皇岛市| 收藏| 濮阳县| 佛坪县| 米易县| 芜湖市| 乌拉特前旗| 闻喜县| 江山市| 岢岚县| 威信县| 武冈市| 连云港市| 平和县| 三都| 凤山市| 铁岭市| 克什克腾旗| 长兴县| 邯郸市|