亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

linux下udp服務(wù)器端源碼示例:

#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è)置地址可復(fù)用 
 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); 
 } 
 
 // 服務(wù)器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è)置地址可復(fù)用 
 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); 
 } 
 
 // 服務(wù)器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)文章

  • 區(qū)分C++中的&和&&

    區(qū)分C++中的&和&&

    這篇文章主要介紹了如何區(qū)分C++的&和&&,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-09-09
  • C語言字符串函數(shù)介紹與模擬實現(xiàn)詳解

    C語言字符串函數(shù)介紹與模擬實現(xiàn)詳解

    字符串函數(shù)(String?processing?function)也叫字符串處理函數(shù),指的是編程語言中用來進行字符串處理的函數(shù),如C,pascal,Visual以及LotusScript中進行字符串拷貝,計算長度,字符查找等的函數(shù)
    2022-02-02
  • C++實現(xiàn)通訊錄管理系統(tǒng)設(shè)計

    C++實現(xiàn)通訊錄管理系統(tǒng)設(shè)計

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)通訊錄管理系統(tǒng)設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言實現(xiàn)會員管理系統(tǒng)

    C語言實現(xiàn)會員管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)會員管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • c語言中enum類型的用法案例講解

    c語言中enum類型的用法案例講解

    這篇文章主要介紹了c語言中enum類型的用法案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是本文的詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言實現(xiàn)洗牌與發(fā)牌游戲

    C語言實現(xiàn)洗牌與發(fā)牌游戲

    這篇文章主要為大家詳細(xì)介紹了C語言洗牌與發(fā)牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • opencv3/C++ 離散余弦變換DCT方式

    opencv3/C++ 離散余弦變換DCT方式

    今天小編就為大家分享一篇opencv3/C++ 離散余弦變換DCT方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Qt圖形圖像開發(fā)之QT滾動區(qū)控件(滾動條)QScrollArea的詳細(xì)方法用法圖解與實例

    Qt圖形圖像開發(fā)之QT滾動區(qū)控件(滾動條)QScrollArea的詳細(xì)方法用法圖解與實例

    這篇文章主要介紹了Qt圖形圖像開發(fā),QT滾動區(qū)控件(滾動條)QScrollArea的詳細(xì)方法用法圖解與實例,需要的朋友可以參考下
    2020-03-03
  • C語言手把手帶你掌握帶頭雙向循環(huán)鏈表

    C語言手把手帶你掌握帶頭雙向循環(huán)鏈表

    帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨存儲數(shù)據(jù)。實際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表。另外這個結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實現(xiàn)以后會發(fā)現(xiàn)結(jié)構(gòu)會帶來很多優(yōu)勢,實現(xiàn)反而簡單
    2022-04-04
  • C++回溯法實例分析

    C++回溯法實例分析

    這篇文章主要介紹了C++回溯法,實例講述了回溯法的原理與實現(xiàn)方法,最后給出了回溯法解決八皇后的實例,需要的朋友可以參考下
    2014-09-09

最新評論