国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 伊春市| 青阳县| 上犹县| 延寿县| 当涂县| 石河子市| 温宿县| 鹿邑县| 蓬安县| 天等县| 拉萨市| 衢州市| 延寿县| 嘉义县| 乌兰县| 砚山县| 龙州县| 南投市| 宝丰县| 中超| 文昌市| 宜川县| 长丰县| 清涧县| 永宁县| 鄂托克旗| 威远县| 盐池县| 贵阳市| 安塞县| 都安| 峨眉山市| 六盘水市| 桐庐县| 沽源县| 衡水市| 安溪县| 正宁县| 金秀| 同德县| 丹巴县|