发送方:

/*
* File: main.c
* Author: tianshuai
*
* Created on 2011年11月29日, 下午10:34
*
* 主要实现:发送20个文本消息,然后再发送一个终止消息
*/ #include <stdio.h>
#include <stdlib.h> #include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h> int port=;
int main(int argc, char** argv) {
int socket_descriptor; //套接口描述字
int iter=;
char buf[];
struct sockaddr_in address;//处理网络通信的地址 bzero(&address,sizeof(address));
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr("127.0.0.1");//这里不一样
address.sin_port=htons(port); //创建一个 UDP socket socket_descriptor=socket(AF_INET,SOCK_DGRAM,);//IPV4 SOCK_DGRAM 数据报套接字(UDP协议) for(iter=;iter<=;iter++)
{
/*
* sprintf(s, "%8d%8d", 123, 4567); //产生:" 123 4567"
* 将格式化后到 字符串存放到s当中
*/
sprintf(buf,"data packet with ID %d\n",iter); /*int PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int flags,const struct sockaddr FAR* to, int tolen);  
* s:一个标识套接口的描述字。 
* buf:包含待发送数据的缓冲区。  
* len:buf缓冲区中数据的长度。 
* flags:调用方式标志位。  
* to:(可选)指针,指向目的套接口的地址。 
* tolen:to所指地址的长度。
   */
sendto(socket_descriptor,buf,sizeof(buf),,(struct sockaddr *)&address,sizeof(address));
} sprintf(buf,"stop\n");
sendto(socket_descriptor,buf,sizeof(buf),,(struct sockaddr *)&address,sizeof(address));//发送stop 命令
close(socket_descriptor);
printf("Messages Sent,terminating\n"); exit(); return (EXIT_SUCCESS);
} 接受方: /*
* File: main.c
* Author: tianshuai
*
* Created on 2011年11月29日, 下午10:34
*/ #include <stdio.h>
#include <stdlib.h> #include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h> int port=; int main(int argc, char** argv) { int sin_len;
char message[]; int socket_descriptor;
struct sockaddr_in sin;
printf("Waiting for data form sender \n"); bzero(&sin,sizeof(sin));
sin.sin_family=AF_INET;
sin.sin_addr.s_addr=htonl(INADDR_ANY);
sin.sin_port=htons(port);
sin_len=sizeof(sin); socket_descriptor=socket(AF_INET,SOCK_DGRAM,);
bind(socket_descriptor,(struct sockaddr *)&sin,sizeof(sin)); while()
{
recvfrom(socket_descriptor,message,sizeof(message),,(struct sockaddr *)&sin,&sin_len);
printf("Response from server:%s\n",message);
if(strncmp(message,"stop",) == )//接受到的消息为 “stop”
{ printf("Sender has told me to end the connection\n");
break;
}
} close(socket_descriptor);
exit(); return (EXIT_SUCCESS);
}

转载自http://blog.csdn.net/tianshuai1111/article/details/7027444

【Linux】Linux C socket 编程之UDP的更多相关文章

  1. [深入浅出WP8.1(Runtime)]Socket编程之UDP协议

    13.3 Socket编程之UDP协议 UDP协议和TCP协议都是Socket编程的协议,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议.UDP适用于一次只 ...

  2. Linux系统编程(37)—— socket编程之UDP服务器与客户端

    典型的UDP客户端/服务器通讯过程: 编写UDP Client程序的步骤 1.初始化sockaddr_in结构的变量,并赋值.这里使用"8888"作为连接的服务程序的端口,从命令行 ...

  3. Linux系统编程(36)—— socket编程之UDP详解

    UDP 是User DatagramProtocol的简称,中文名是用户数据报协议.UDP协议不面向连接,也不保证传输的可靠性,例如: 1.发送端的UDP协议层只管把应用层传来的数据封装成段交给IP协 ...

  4. python的socket编程之udp编程

    在上篇文章中,仅仅讲述了如何进行了TCP编程,在本章中,将讲述使用udp进行编码,先看如下的代码,服务器端: root@python 513]# cat serverudp.py #!/usr/bin ...

  5. Java Socket编程之UDP

    UDP编程: 将要传输的数据定义成数据包(Datagram),在数据报中指明所要到达的Socket(主机地址和端口号),然后再将数据报发送出去. 相关操作类:     DatagramPacket   ...

  6. C#编程 socket编程之udp服务器端和客户端

    基于Udp协议是无连接模式通讯,占用资源少,响应速度快,延时低.至于可靠性,可通过应用层的控制来满足.(不可靠连接) 使用Udp协议通讯需要具备以下几个条件: (1).建立一个套接字(Socket) ...

  7. 网络编程之UDP编程

    网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...

  8. 老雷socket编程之PHP利用socket扩展实现聊天服务

    老雷socket编程之PHP利用socket扩展实现聊天服务 socket聊天服务原理 PHP有两个socket的扩展 sockets和streamssockets socket_create(AF_ ...

  9. Java网络编程之UDP

    Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...

随机推荐

  1. CentOS 7.2安装gitlab-ce

    国内网络原因,gitlab-ce安装包可以在清华大学开源网站镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ [root@gitlab ~]# ...

  2. Arduino I2C + 温湿度传感器HTS221

    主要特性 HTS221是意法半导体(STMicroelectronics)生产的小体积.数字式温湿度传感器IC.该IC目前在官网仍处在“评估”状态.其主要特性: 工作电压:1.7~3.6V 数据输出频 ...

  3. android hook getdeceiveid

    很多手机软件使用了手机绑定.QQ,微信等.如果使用了不同的设备,则需要验证码. 要用一台手机来模拟与另一台手机一样环境,估计hook 系统的相关函数可以实现. 想着应该有现成的软件的,例如 smart ...

  4. Data Base Oracle 常用命令

    Data Base  Oracle 常用命令 1.登录:(不需要密码,属于管理员权限) conn /as sysdba; 2.查看数据库存储位置: select name from v$datafil ...

  5. 解决$ git clone fatal: Authentication failed

    今天在使用git clone克隆项目的时候报如下错误: $ git clone XXXXXX Cloning into 'XXXX'... fatal: Authentication failed f ...

  6. Spring boot整合Mongodb

    最近的项目用了Mongodb,网上的用法大多都是七零八落的没有一个统一性,自己大概整理了下,项目中的相关配置就不叙述了,由于spring boot的快捷开发方式,所以spring boot项目中要使用 ...

  7. [ActionScript 3.0] 利用ColorTransform实现对象(图片)的曝光过渡效果

    原图效果 过渡效果 这个效果可以用帧动画实现较为简单,只需要调节这个影片剪辑的色彩效果样式里面的高级选项的三个通道值,以下用代码简单测试,可作为文档类: package { import com.tw ...

  8. C# - 图片操作和Base64处理

    旋转 (1)按角度旋转 /// <summary> /// 根据角度旋转图标 /// </summary> /// <param name="img" ...

  9. python2与python3差异,以及如何写两者兼容代码

    1.路径差异: 绝对导入:跳过包内,直接搜索 sys.path ,在sys.path的基础上进行我们的模块搜索. 相对导入:先包内,再包外,再,,, python2是默认相对导入的,因此对于一般性的导 ...

  10. 原生js 实现旋转木马

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...