国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Visual C++設(shè)計(jì)UDP協(xié)議通訊示例

2019-11-17 05:25:43
字體:
供稿:網(wǎng)友
一、緒言

   UDP是一種面向非連接,不可靠的通訊協(xié)議,相對于TCP來說,雖然可靠性不及,但傳輸效率較高。所以在網(wǎng)絡(luò)上仍有很大的用途。這幾日需要了解下udp通訊的過程,上網(wǎng)發(fā)現(xiàn)這方面的資料還挺少。于是仔細(xì)的翻找了下msdn,基本上搞清楚了udp通訊的過程。做了一個(gè)測試的例子。希望對大家有幫助。

  二、UDP的通訊過程

server端: open a socket(socket)--->name the socket(bind)--->send and receive data(sendto recvfrom)--->close socket(closesocket)
client端: open a socket(socket)---------------------------->send and receive data(sendto recvfrom)--->close socket(closesocket)

   server端無需listen,client端無需connect,因此udp中server和client的區(qū)別相對較模糊。只要調(diào)用sendto和recvfrom就可以給指定的地址收發(fā)數(shù)據(jù),但并不保證收發(fā)的數(shù)據(jù)的完整性和可靠性。

  三、示例

   udpserver主要代碼:

void main()
{
SOCKET socket1;

InitWinsock();
strUCt sockaddr_in local;
struct sockaddr_in from;
int fromlen =sizeof(from);
local.sin_family=AF_INET;
local.sin_port=htons(1000); ///監(jiān)聽端口
local.sin_addr.s_addr=INADDR_ANY; ///本機(jī)

socket1=socket(AF_INET,SOCK_DGRAM,0);
bind(socket1,(struct sockaddr*)&local,sizeof local);
while (1)
{
char buffer[1024]="/0";
if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)
{
printf("Received datagram from %s--%s/n",inet_ntoa(from.sin_addr),buffer);
////給cilent發(fā)信息
sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);

}
Sleep(500);
}
closesocket(socket1);
}

   udpcilent主要代碼:

void main()
{
  SOCKET socket1;

  InitWinsock();
  struct sockaddr_in server;
  int len =sizeof(server);
  server.sin_family=AF_INET;
  server.sin_port=htons(1000); ///server的監(jiān)聽端口
  server.sin_addr.s_addr=inet_addr("168.168.0.10"); ///server的地址

  socket1=socket(AF_INET,SOCK_DGRAM,0);
  while (1)
  {
   char buffer[1024]="/0";
   printf("input message/n");
   scanf("%s",buffer);
   if (strcmp(buffer,"bye")==0)
    break;
    if (sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)
    {
     if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,&len) != SOCKET_ERROR)
      printf("rece from server:%s/n",buffer);
    }
  }
  closesocket(socket1);
}

  四、結(jié)束語

   UDP通訊比TCP簡單了很多,在數(shù)據(jù)可靠性不是很高的情況下,有使用的價(jià)值。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 资阳市| 鄂托克前旗| 凤庆县| 宜昌市| 屯昌县| 海兴县| 图们市| 香港 | 旬阳县| 牙克石市| 张家川| 永城市| 博客| 怀宁县| 霍城县| 乌审旗| 中西区| 大英县| 高州市| 靖安县| 专栏| 阿勒泰市| 淮安市| 万年县| 交口县| 山阴县| 宜宾县| 佛山市| 萍乡市| 名山县| 行唐县| 宣恩县| 建德市| 广德县| 南安市| 汾西县| 东源县| 台湾省| 桐城市| 甘肃省| 教育|