[ 永远的UNIX > Linux网络编程--5. 用户数据报发送 ] body,th,input,select,textarea,select,checkbox{font:12pt 宋体} A:link { text-decoration:underline; color:#E6A306} A:visited { text-decoration:underline; color:#E6A306} A:hover { text-decoration:underline; color:#FFFF00} body { font-family: "宋体", "serif"; font-size: 12pt} td { font-family: "宋体", "serif"; font-size: 12pt} p { font-size: 9pt; line-height: 150%} --> 首页 > 编程技术 > 网络编程 > 正文 Linux网络编程--5. 用户数据报发送 http://linuxc.51.net 作者:hoyt (2001-05-08 11:21:31)
我们前面已经学习网络程序的一个很大的部分,由这个部分的知识,我们实际上可以写出大部分的基于TCP协议的网络程序了.现在在Linux下的大部分程序都是用我们上面所学的知识来写的.我们可以去找一些源程序来参考一下.这一章,我们简单的学习一下基于UDP协议的网络程序.
5.1 两个常用的函数
int recvfrom(int sockfd,void *buf,int len,unsigned int flags,struct sockaddr * from int *fromlen)
int sendto(int sockfd,const void *msg,int len,unsigned int flags,struct sockaddr *to int tolen)
sockfd,buf,len的意义和read,write一样,分别表示套接字描述符,发送或接收的缓冲区及大小.recvfrom负责从sockfd接收数据,如果from不是NULL,那么在from里面存储了信息来源的情况,如果对信息的来源不感兴趣,可以将from和fromlen设置为NULL.sendto负责向to发送信息.此时在to里面存储了收信息方的详细资料.
5.2 一个实例
/* 服务端程序 server.c */
#include
#include
#include
#include
#include
#define SERVER_PORT 8888
#define MAX_MSG_SIZE 1024
void udps_respon(int sockfd)
{
struct sockaddr_in addr;
int addrlen,n;
char msg[MAX_MSG_SIZE];
while(1)
{ /* 从网络上度,写到网络上面去 */
n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,
(struct sockaddr*)&addr,&addrlen);
msg[n]=0;
/* 显示服务端已经收到了信息 */
fprintf(stdout,"I have received %s",msg);
sendto(sockfd,msg,n,0,(struct sockaddr*)&addr,addrlen);
}
}
int main(void)
{
int sockfd;
struct sockaddr_in addr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd 相关文章 关键词 Linux网络编程--4. 完整的读写函数 (2001-05-08 11:20:52)Linux网络编程--3. 服务器和客户机的信息函数 (2001-05-08 11:20:14)Linux网络编程--2. 初等网络函数介绍(TCP) (2001-05-08 11:19:34)Linux网络编程--1. Linux网络知识介绍 (2001-05-08 11:16:55) © 樊强制作 欢迎分享 2001