2、网络编程之基于UDP示例
一、一些概念
套接字是表示了通信的端点。
网络通信中,使用“连接”作为最基本的抽象,同时将TCP连接的端点称为套接字。套接字=(IP,端口)
二、连接过程
服务器端(接收端)程序:
1、创建套接字(socket)。
2、将套接字绑定到一个本地地址和端口上(bind)。
3、等待接收数据(recvfrom)。
4、关闭套接字。
客户端(发送端)程序:
1、创建套接字(socket)。
2、向服务器发送数据(sendto)。
3、关闭套接字。
三、示例程序
服务器端:
#include <Winsock2.h>
#include <stdio.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
char recvBuf[100];
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
printf("%s\n",recvBuf);
closesocket(sockSrv);
WSACleanup();
}
客户端:
#include <Winsock2.h>
#include <stdio.h>
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return;
}
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
sendto(sockClient,"Hello",strlen("Hello")+1,0,
(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();
}
由上我们可以看出,在TCP连接中,客户端不需进行绑定socket与地址,只需提出连接申请。而服务器端需要通过bind把套接字绑定到本地地址与指定的端口上。
而在UDP连接中,服务器端同样需绑定一个socket与一个端接口,而客户端不要绑定,不要连接,可直接发送。事实上,在UDP通信中,服务器端和客户端是相对的,两端可以同时为服务器端和客户端。
具体细节可以参考孙的书关于UDP的聊天部分。
还有TCP/IP协议中采用的是高位先存格式(高地址存低字节)。
参考:
[1] 孙鑫 《vc++深入》
[2] MSDN
[3] http://hi.baidu.com/buddhist_byr/blog/item/4acfe1a24d0a20a9caefd01f.html
转载于:https://www.cnblogs.com/mydomain/archive/2010/08/12/1798483.html
2、网络编程之基于UDP示例相关推荐
- java网络编程作业基于UDP简单聊天窗口,图形化界面,包含客户端和服务端
//郑州轻工业大学 //题号:实验四 第二题 //题目:使用基于UDP的网络编程方法,完成客户端和服务器间的聊天功能.要求图形界面. java网络编程作业 基于UDP简单聊天窗口,图形化界面,包含客户 ...
- Linux网络编程:基于UDP的程序开发回顾篇
基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下: 对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多.对比面向连接的TCP程序,服务端少了li ...
- 【Linux网络编程】基于UDP实现多人聊天室
文章目录 一.UDP的概念 1.1 UDP 1.2 UDP特点 二. 采用UDP实现多人聊天室原因 三.多人聊天室项目功能 四.实现多人聊天室项目流程分析 4.1 前期准备 4.1.1 定义结构体 4 ...
- 网络编程(基于socket接口技术的进程间通信)接上一篇文章补充
目录 一.网络编程(基于socket接口技术) 1.基于TCP协议的网络通信 编程模型: 2.基于UDP通信协议的网络通信 编程模型: 3.新增函数: 大小端数据转换函数: ip地址转换函数: TCP ...
- socket recv 服务端阻塞 python_网络编程(基于socket编程)
网络编程(基于socket编程) socket套接字:应用程序通常通过socket"套接字"向网络发送请求或应答网络请求,是主机间或同一计算机中的进程间相互通讯 socket是介于 ...
- python网络通信编程实例_python网络编程之数据传输UDP实例分析
本文实例讲述了python网络编程之数据传输UDP实现方法.分享给大家供大家参考.具体分析如下: 一.问题: 你觉得网络上像msn,qq之类的工具在多台机器之间互相传输数据神秘吗?你也想玩一下在两台机 ...
- TCP/IP网络编程之基于TCP的服务端/客户端(二)
回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...
- TCP/IP网络编程之基于TCP的服务端/客户端(一)
TCP/IP网络编程之基于TCP的服务端/客户端(一) 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于 ...
- 21天学会Java之(Java SE第十三篇):网络编程、TCP/UDP通信
如今,计算机已经成为人们学习.工作.生活必不可少的工具.人们利用计算机可以和亲朋好友在网上聊天,玩网游或发邮件等,这些功能的实现都离不开计算机网络.计算机网络实现了不同计算机之间的通信,而这些必须依靠 ...
最新文章
- 查看Linux发行版的名称和版本号
- HDU1588(矩阵连乘求和)
- php 序列化有上限,总结对比php中的多种序列化
- “睡服”面试官系列第二十一篇之class基本语法(建议收藏学习)
- HTML音乐播放没声音,网页没有声音但系统显示有声音怎么回事?如何解决?
- 我是如何白嫖 Github 服务器自动抓取每日必应壁纸的?
- Java16-java语法基础——异常
- Django-----模板嵌套
- AC日记——A+B Problem(再升级) 洛谷 P1832
- 华为onu 调为交换机_华为MA5626配置成普通交换机的方法.docx
- Cairo-基本概念
- 用Java编程卫星坐标_2 分钟掌握卫星星座图
- Java实验3 第十二题:财务应用程序:信用卡号的合法性
- VRay Next for SketchUp 泳池水材质制作教程
- 【应用篇】MyBatis学习笔记
- 计算机软件投资所得税减免,个人以计算机软件著作权增资可以享受延迟纳个税的优惠吗...
- 竞赛通知|2021年全国大学生电子设计竞赛启动通知!
- freecodecamp_freeCodeCamp发布样式指南
- Shader头发效果
- win7桌面的计算机在哪里设置密码,win7如何添加屏幕保护密码|win7设置屏幕保护密码的方法...
热门文章
- oracle归档日志太多(ORA-00257: archiver error. Connect internal only, until freed)错误的处理方法
- Android6.0之后的权限机制对App开发的影响
- Android开发笔记(七十)反编译初步
- AD程序设计c语言,AVR AD转换的C语言编程
- ngxin做http强制跳转https,接口的POST请求变成了GET
- c语言 static变量和函数
- 简述关系型数据库和非关系型数据库
- windows 哪些服务必须打开
- [android] socket在手机上的应用
- [NHibernate]集合类(Collections)映射