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. Go:sync.Once 实现单例模式

    代码: package main import ( "fmt" "sync" ) type Singleton struct{} var singleton * ...

  2. Python简介--备份

    脚本开头指定解释器路径  /usr/bin/env  python  和  /usr/bin/python比较.(Linux在PATH中找到第一个路径的Python版本来执行) PATH中第一个路径是 ...

  3. qt5.5.1配置winpcap4.1.2

    下载winpcap开发包,下载地址是http://www.winpcap.org/devel.htm 下载之后解压

  4. NLog在asp.net core中的应用

    Asp.net core中,自带的Log是在当selfhost运行时,在控制台中输出,不便于查阅,如果用一个log架框,把日志持久化,便于查询. NLog是一个免费的日志记录框架,专门为.net平台下 ...

  5. C#如何根据DataTable生成泛型List或者动态类型list

    背景:在项目中,sql语句检索返回DataTable,然后根据检索结果做进一步的操作,本篇文章即是介绍如何将DataTable快速生成泛型List返回. 假设存在如下学生类: public class ...

  6. ubuntu安装远程桌面连接工具

    1. 安装xrdp sudo apt-get -y install xrdp   2.安装vnc4server sudo apt-get install vnc4server   3.安装xubunt ...

  7. 前端开发利器webStorm 3.0配置使用

     安装了phpstorm之后,想配置svn,结果在file->settings->Version Contorl->subversion->with conmand line ...

  8. 分享14个很酷的jQuery导航菜单插件

    导航按钮是网站的非常重要的一部分,因其将网站的所有部分而集中一处,jQuery导航菜单插件在其中扮演重要的角色. 本文介绍了14个很酷的jQuery导航菜单插件,它们够漂亮.简单,并且完全兼容各种类型 ...

  9. 解决Can’t finish GitHub sharing process Successfully created project ‘GitHubDemo’ on GitHub

    Can't finish GitHub sharing process        Successfully created project 'KeyWordsFrameWork' on GitHu ...

  10. selenium grid使用(windows+centos7.4)

    windows作为hub,centos7.4作为node. firefox用的centos7自带的52版本,懒得更新. vm虚拟机必须设置成bridge模式上网,否则报错.具体参见博文:Vmware改 ...