Udp编程
来源:互联网 发布:税友软件深圳分公司 编辑:程序博客网 时间:2024/05/22 01:43
一.UDP编程流程
(1)服务器(servers):
创建套接字(socket)
绑定IP地址和端口(bind)
收发数据(sendto/recvfrom)
关闭连接(close)
(2)客户端(client):
创建套接字(socket)
收发数据(send/recvfrom)
关闭连接(closesocket)
二.用于收发的函数:
int sendto (
SOCKET s,//用来发送数据的套接字
const char FAR * buf,//指向发送数据的缓冲区
int len,//要发送数据长度
int flags,//标志,一般为0
const struct sockaddr FAR *to,//指向一个包含目标地址和端口号的socketadd_in 结构
int tolen //socketadd_in 结构的大小
);
相关函数:send ,sendmsg
函数原型:ssize_t recvfrom(int sockfd,void *buf,int len,unsigned int flags, struct sockaddr *from,socket_t *fromlen); ssize_t 相当于 int,socket_t 相当于int ,这里用这个名字为的是提高代码的自说明性。
sockfd:标识一个已连接的描述套接口字。
buf:接收数据缓冲区。
len:缓冲区长度。
flags:调用操作方式。是以下一个或者多个标志的组合体,可通过or操作连在一起:
结构sockaddr请参考bind()函数.参数fromlen为sockaddr的结构长度.。相关函数:recv, recvmsg
三.程序
servers:
- // UDPServer.cpp文件
- //sock->bind->recvfrom->close
- #include "InitSock.h"
- #include <stdio.h>
- CInitSock initSock; // 初始化Winsock库
- int main()
- {
- // 创建套节字
- int s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if(s == INVALID_SOCKET)
- {
- printf("Failed socket!!!\n");
- return 0;
- }
- // 填充sockaddr_in结构
- sockaddr_in sin;
- sin.sin_family = AF_INET;
- sin.sin_port = htons(4567);
- sin.sin_addr.s_addr = INADDR_ANY;
- // 绑定这个套节字到一个本地地址
- if(bind(s, (struct sockaddr)&sin, sizeof(sin)) == SOCKET_ERROR)
- {
- printf("Failed bind!!!\n");
- return 0;
- }
- // 接收数据
- char buff[1024];
- sockaddr_in addr;
- int nLen = sizeof(addr);
- while(TRUE)
- {
- int nRecv = recvfrom(s, buff, 1024, 0, (sockaddr*)&addr, &nLen);
- if(nRecv > 0)
- {
- buff[nRecv] = '\0';
- printf(" recv data(%s):%s", inet_ntoa(addr.sin_addr), buff);
- }
- }
- close(s);
- }
- // UDPClient文件
- //sock->sendto->close
- #include "InitSock.h"
- #include <stdio.h>
- CInitSock initSock; // 初始化Winsock库
- int main()
- {
- // 创建套节字
- int s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- if(s == INVALID_SOCKET)
- {
- printf("Failed socket!! %d \n", ::WSAGetLastError());
- return 0;
- }
- // 也可以在这里调用bind函数绑定一个本地地址
- // 否则系统将会自动安排
- // 填写远程地址信息
- sockaddr_in addr;
- addr.sin_family = AF_INET;
- addr.sin_port = htons(4567);
- // 注意,这里要填写服务器程序所在机器的IP地址
- // 如果你的计算机没有联网,直接使用127.0.0.1即可
- addr.sin_addr.s_addr = inet_addr("127.0.0.1");
- // 发送数据
- char szText[] = " TCP Server Demo! \r\n";
- sendto(s, szText, strlen(szText), 0, (sockaddr*)&addr, sizeof(addr));
- close(s);
- return 0;
- }
其实UDP面向无连接的程序与TCP面向连接的程序有很大的相似性,但UDP的较为简单些。由于传输并不可靠,因此多用于线路可靠的传输系统中。
0 0
- UDP编程
- UDP编程
- UDP编程
- UDP编程
- Udp编程
- UDP编程
- UDP编程
- UDP编程
- UDP编程
- UDP 编程
- udp编程
- Udp编程
- UDP编程
- UDP编程
- UDP编程
- UDP编程
- UDP编程
- udp编程
- 制作ipk软件安装包
- 2010年10月10日网易笔试
- 400G标准启程 以太网创新再续传奇
- 400多套安卓源码
- Android ExpandableListView(多级列表)
- Udp编程
- ubuntu下编译适合ndk的x264(arm和x86)
- B-Tree
- Android 个人通讯录
- 阿里巴巴笔试题
- Linux系统下如何编程?
- 继续教育软件
- MKNetworkKit 简单GET和POST使用
- VC++的DDX/DDV机制