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. gprc-java与golang分别实现服务端,客户端,跨语言通信(二.golang实现)

    1.编译器protoc, 下载地址:https://github.com/protocolbuffers/protobuf/releases  (下载对应的版本, 解压后放到go的bin中) 2.安装 ...

  2. (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)

    openssl  rsa      是RSA对称密钥的处理工具 openssl  pkey   是通用非对称密钥处理工具,它们用法基本一致,所以只举例说明openssl rsa. 它们的用法很简单,基 ...

  3. Openstack实验笔记

    Openstack实验笔记 制作人:全心全意 Openstack:提供可靠的云部署方案及良好的扩展性 Openstack简单的说就是云操作系统,或者说是云管理平台,自身并不提供云服务,只是提供部署和管 ...

  4. 条款6:若不想使用编译器自动生成的函数,就该明确拒绝(Explicity disallow the use of compiler-generated functions you do not want)

    class uncopyable{ protected: uncopyable(){};                                                         ...

  5. docker:安装tomcat

    文章来源:http://www.cnblogs.com/hello-tl/p/8929879.html 0.下载镜像 # docker pull tomcat:8.5 1.复制tomcat配置 先启动 ...

  6. MySQL之federated

    由于夸服务器查询的限制,federated能够使得所有的表像是在同一台服务器上查询 (show engines-->no-->在my.ini里面添加fedrated) 经过测试,在开启fe ...

  7. AI学习笔记(02)

    AI学习笔记   第一个黑箭头是用于挑选物体和移 动物体.在绘图是选中一个物体,就可以将它自由的移动.和其他的绘图软件相同当你选 中物体的时候物体周围就会出现八个方形的控制点,你可以通过这些控制点对物 ...

  8. cherrypy & gevent patch

    给cherrypy 打gevent WSGIServer的patch 1. patch Serving 类 2. 关闭python的原生WSGIServer 具体使用例子参考 我的开源项目  http ...

  9. zoj 1240

    IBM Minus One Time Limit: 2 Seconds      Memory Limit: 65536 KB You may have heard of the book '2001 ...

  10. python学习笔记--python数据类型

    一.整形和浮点型 整形也就是整数类型(int)的,在python3中都是int类型,没有什么long类型的,比如说存年龄.工资.成绩等等这样的数据就可以用int类型,有正整数.负整数和0,浮点型的也就 ...