加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VC环境下UDP Socket编程示例

(2007-11-29 15:34:02)
分类: C
 VC下的Socket编程要包含winsock2.h头文件,并在项目设置中加入链接库ws2_32.lib.下面是一个用UDP实现的echo程序示例。
服务器端代码:

#include <stdio.h>
#include <Winsock2.h>

void main()
{
   SOCKET socket1;
   WSADATA wsaData;
   if (WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL
    {
         printf("Winsock无法初始化!\n");
         WSACleanup();
         return;
    }
   struct sockaddr_in local;
   struct sockaddr_in from;
   int fromlen =sizeof(from);
   local.sin_family=AF_INET;
   local.sin_port=htons(27015); ///监听端口
   local.sin_addr.s_addr=INADDR_ANY; ///本机

   socket1=socket(AF_INET,SOCK_DGRAM,0);
   bind(socket1,(struct sockaddr*)&local,sizeof(local));
   while (1)
   {
      char buffer[1024]="\0";
      printf("waiting-------------\n");
     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);
        sendto(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&from,fromlen);

  }
   }
   closesocket(socket1);
}

 

客户端代码:

#include <stdio.h>
#include <Winsock2.h>

void main()
{
   SOCKET socket1;
   WSADATA wsaData;
   if (WSAStartup(MAKEWORD(2,1),&wsaData)) //调用Windows Sockets DLL
    {
         printf("Winsock无法初始化!\n");
         WSACleanup();
         return;
    }
   struct sockaddr_in server;
   int len =sizeof(server);
   server.sin_family=AF_INET;
   server.sin_port=htons(27015); ///server的监听端口
   server.sin_addr.s_addr=inet_addr("127.0.0.1"); ///server的地址
   printf("connect the server...\n");
   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)
      {
         printf("exit\n");
         Sleep(100);
         closesocket(socket1);
         break;
   }

      if(sendto(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)
      {
        Sleep(100);
        if (recvfrom(socket1,buffer,sizeof(buffer),0,(struct sockaddr*)&server,&len) != SOCKET_ERROR)
        printf("echo from server:%s\n",buffer);
      }
    
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有