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端,查看执行效果:

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

基于UDP的通讯的更多相关文章

  1. TwinCAT 3中基于UDP协议通讯的C++实现

    因为项目需要,学习了TwinCAT3中使用UDP协议进行通讯的基本知识.这个做个简单的笔记,方便以后查询. 1 概述 倍福为了实现从实时环境中直接访问网卡(network cards)专门提供了一个函 ...

  2. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  3. Day9 基于TCP的套接字和基于UDP的套接字

    服务端: ss=socket() #创建服务器套接字 ss.bind() #把地址绑定到套接字 ss.listen() #监听套接字, inf_loop: #服务器无限循环 cs=ss.accept( ...

  4. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

  5. 网络编程----socket介绍、基于tcp协议的套接字实现、基于udp协议的套接字实现

    一.客户端/服务器架构(C/S架构)                                                即C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架 ...

  6. 计算机网络课设之基于UDP协议的简易聊天机器人

    前言:2017年6月份计算机网络的课设任务,在同学的帮助和自学下基本搞懂了,基于UDP协议的基本聊天的实现方法.实现起来很简单,原理也很简单,主要是由于老师必须要求使用C语言来写,所以特别麻烦,而且C ...

  7. 基于UDP的套接字、粘包问题

    一.基于UDP的套接字 UDP服务端 ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfro ...

  8. 基于UDP协议编程

    基于udp套接字 udp是无链接的,先启动哪一端都不会报错. UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务.不会使用块的合并优化算法,, ...

  9. Android基于UDP的局域网聊天通信

    代码地址如下:http://www.demodashi.com/demo/12057.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1. 开发环境 1.1 开发工具 ...

随机推荐

  1. C-基础:数组名与取地址符&

    指出下面代码的输出,并解释为什么.(不错,对地址掌握的深入挖潜) main() { ]={,,,,}; ); printf(),*(ptr-)); } 输出:2,5     *(a+1)就是a[1], ...

  2. ES6 第一章 let和const命令 具体参照http://es6.ruanyifeng.com

    1.let类似于var用用来定义变量 1)let没有预解析,不存在变量提升 // var 的情况 console.log(foo); // 输出undefined var foo = 2; // le ...

  3. [ERROR ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not <type 'str'>.

    错误信息 [ERROR ] Error parsing configuration file: /etc/salt/minion - conf should be a document, not &l ...

  4. mysql主从同步 change master to配置

    CHANGE MASTER TO MASTER_HOST='10.0.0.52', MASTER_PORT=3308, MASTER_AUTO_POSITION=1, MASTER_USER='rep ...

  5. 树莓派 - RasberryPi推送数据到cloudMQTT

    创建用户 在https://www.cloudmqtt.com/上创建一个帐户 转到右上角的控制面板 点击"创建"按钮 安装lib sudo pip install paho-mq ...

  6. Python装饰器粗解学习

    此次学习资料详细来自:http://blog.csdn.net/u013471155 本次是粗学,仍有诸多疑问,暂且记录一二,如有不足和建议,希望可以达者指点. 三个关键点理解:   1.关于函数“变 ...

  7. 杭电 2553 N皇后问题 (dfs)

    Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N,求出有多少种合 ...

  8. 【HIHOCODER 1033 】 交错和(数位DP)

    描述 输入 输入数据仅一行包含三个整数,l, r, k(0 ≤ l ≤ r ≤ 1018, |k| ≤ 100). 输出 输出一行一个整数表示结果,考虑到答案可能很大,输出结果模 109 + 7. 提 ...

  9. 跟初学者学习IbatisNet第三篇

    这一章我们主要介绍一下IbatisNet里面的动态sql语句的运用,比如有时候我们想进行模糊查询,参数是动态加入的.或者要实现top n ,order by ,分页等功能的时候,我们就不得不用动态拼接 ...

  10. String类型根据逗号分隔转为list

    String ids = pd.getString("IDS");//从pd里取出字符串 List idList = Arrays.asList(ids.split(", ...