XX:那飘过的100~_~{2014/10/03 10:57}

UDP是一种面向非连接SOCK_DGRAM,提供无连接服务。数据包以独立包形式发送,不提供无措保证,数据能够丢失或反复。

UDP的Server和Client的差别相对照较模糊,仅仅要调用 sendto和 recvfrom 就能够给指定的地址收发数据。

1. server端:

// udpClient.cpp : Defines the entry point for the application.
// #include "stdafx.h"
#include "tchar.h" #pragma comment(lib,"wsock32.lib")
#include <stdio.h>
#include <winsock2.h> BOOL InitWinsock(); //Winsock服务初始化 void main()
{ SOCKET socket1;
InitWinsock();
struct sockaddr_in local;
struct sockaddr_in from;
int err;
int fromlean=sizeof(from); local.sin_family=AF_INET;
local.sin_port=htons(1234); //监听端口
local.sin_addr.S_un.S_addr=INADDR_ANY; //本机
socket1=socket(AF_INET,SOCK_DGRAM,0); bind(socket1,(sockaddr *)&local,sizeof local);
while(true)
{
char buffer[1024]="\0";
printf("waiting for message from others \n"); err=recvfrom(socket1,buffer,sizeof(buffer),0,(sockaddr *)&from,&fromlean);
if(err!=SOCKET_ERROR)
{ printf("Received from %s--%s\n",inet_ntoa(from.sin_addr),buffer);
//给Client发信息
sendto(socket1,buffer,sizeof buffer,0,(sockaddr *)&from,fromlean);
}
Sleep(500);
}
closesocket(socket1);
} BOOL InitWinsock()
{
int Error;
WORD Version;
WSADATA Wsa;
Version=MAKEWORD(2,2);
Error=WSAStartup(Version,&Wsa); if(Error!=0)
{
return FALSE;
}
else
{
if(LOBYTE(Wsa.wVersion)!=2 || HIBYTE(Wsa.wHighVersion)!=2)
{
WSACleanup();
return FALSE;
}
}
return TRUE;
}

2.client

// udpClient.cpp : Defines the entry point for the application.
// #include "stdafx.h"
#include "tchar.h" #pragma comment(lib,"wsock32.lib")
#include <stdio.h>
#include <winsock2.h> BOOL InitWinsock(); //Winsock服务初始化 void main()
{ SOCKET socket1;
InitWinsock();
struct sockaddr_in server;
int err;
int lean=sizeof(server);
server.sin_family=AF_INET;
server.sin_port=htons(1234); //服务器的监听端口为1234
server.sin_addr.S_un.S_addr=inet_addr("192.168.1.18"); //设置为本机地址
socket1=socket(AF_INET,SOCK_DGRAM,0);
while(true)
{
char buffer[1024]="\0";
printf("input message \n");
scanf("%s",buffer); if(strcmp(buffer,"bye")==0)
{
break;
}
err=sendto(socket1,buffer,sizeof(buffer),0,(sockaddr *)&server,lean);
if(err!=SOCKET_ERROR)
{ err=recvfrom(socket1,buffer,sizeof(buffer),0,(sockaddr *)&server,&lean);
if(err!=SOCKET_ERROR)
{ printf("receive from server:%s\n",buffer);
}
}
}
closesocket(socket1);
} BOOL InitWinsock()
{
int Error;
WORD Version;
WSADATA Wsa;
Version=MAKEWORD(2,2);
Error=WSAStartup(Version,&Wsa); if(Error!=0)
{
return FALSE;
}
else
{
if(LOBYTE(Wsa.wVersion)!=2 || HIBYTE(Wsa.wHighVersion)!=2)
{
WSACleanup();
return FALSE;
}
}
return TRUE;
}

启动client以及server端,查看执行效果:

程序仍然存在非常大的问题,慢慢改动咯!

最新文章

  1. 【笔记】jstree插件的基本使用
  2. 修正IE6不支持position:fixed的bug(转)
  3. Linux下MySQL/MariaDB Galera集群搭建过程
  4. Acer-宏碁电脑BOIS
  5. Jmeter - 源码开发环境配置
  6. [zhuan] linux 下 wxWidgets 安装,编译
  7. css中position属性(absolute|relative|static|fixed)概述及应用
  8. hibernate配置之&lt;property name=&quot;hbm2ddl.auto&quot;&gt;create&lt;/property&gt;导致每次创建SessionFactory都清空数据库中的数据
  9. CMSIS Example - osMutex osMutexWait osMutexRelease
  10. easyui 文本框 显示提示信息data-options=&quot;prompt:&#39;格式:水箱支架-京东汽配店铺-图集(大图/图集6)&#39;&quot;
  11. JAVA注释方式--目前用的
  12. ASCII十进制转字符串的方法
  13. 28.C++- 单例类模板(详解)
  14. C# string数组转int数组(转载)
  15. 解决Eclipse每次修改完代码后需要先Clean,不然修改的代码无效
  16. android uboot中的mmc命令
  17. Linux paste命令详解
  18. Python学习URL
  19. python面向对象高级:__slots__
  20. CentOS7系列--5.1CentOS7中配置和管理KVM

热门文章

  1. Android开发案例 - 淘宝商品详情【转】
  2. thinkphp5 自定义验证码使用
  3. Firefox--摄像头麦克风权限
  4. (十八)python 3 回调函数
  5. Spring Boot 返回Html界面
  6. mybatis完整sql调试
  7. Activiti数据表
  8. [MVC][Shopping]Copy Will&#39;s Code
  9. 【07】QQ群管理公告小结:
  10. 内置函数--map,filter,reduce