发送方:

/*
 * 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=6789;
int main(int argc, char** argv) {
    int socket_descriptor; //套接口描述字
    int iter=0;
    char buf[80];
    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,0);//IPV4  SOCK_DGRAM 数据报套接字(UDP协议)

for(iter=0;iter<=20;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),0,(struct sockaddr *)&address,sizeof(address));
    }

sprintf(buf,"stop\n");
    sendto(socket_descriptor,buf,sizeof(buf),0,(struct sockaddr *)&address,sizeof(address));//发送stop 命令
    close(socket_descriptor);
    printf("Messages Sent,terminating\n");

exit(0);

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=6789;

int main(int argc, char** argv) {

int sin_len;
    char message[256];

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,0);
    bind(socket_descriptor,(struct sockaddr *)&sin,sizeof(sin));

while(1)
    {
        recvfrom(socket_descriptor,message,sizeof(message),0,(struct sockaddr *)&sin,&sin_len);
        printf("Response from server:%s\n",message);
        if(strncmp(message,"stop",4) == 0)//接受到的消息为 “stop”
        {

printf("Sender has told me to end the connection\n");
            break;
        }
    }

close(socket_descriptor);
    exit(0);

return (EXIT_SUCCESS);
}

转载于:https://www.cnblogs.com/JPAORM/archive/2011/11/30/2510066.html

Linux C socket 编程之UDP相关推荐

  1. Linux下socket编程之UDP简单实现

    本文实现一个简单的UDP小例子,来说明Linux下socket编程之UDP的简单实现.本文主要包括三个部分:服务器端的实现,客服端的实现和通信测试.实现的功能:客服端发送一条消息给服务器端,服务器端把 ...

  2. Linux下Socket编程之UDP原理

    一.设计UDP Server类 人们通常用电话连线来说明TCP协议,而UDP协议,则常常用邮递来做比喻.与TCP有连接的信息传输方式不同,UDP协议被认为是对底层IP协议简单的扩展:协议并不保证每个数 ...

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

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

  4. 基于Linux的Socket编程之TCP全双工Server-Client聊天程序

    转载:http://blog.csdn.net/apollon_krj/article/details/53437764#0-tsina-1-58570-397232819ff9a47a7b7e80a ...

  5. Linux下Socket编程之TCP应用

    现在,我们用前面所构建的socket类,重新设计<Linux下Socket编程之TCP Server端>中echo的服务器,然后设计客户端程序. echo服务器的工作原理很简单: 1.接收 ...

  6. Linux下Socket编程之TCP Server端

    一.建模 绝大部分关于socket编程的教程总是从socket的概念开始讲起的.要知道,socket的初衷是个庞大的体系,TCP/IP只是这个庞大体系下一个很小的子集,而我们真正能用上的更是这个子集中 ...

  7. Linux下Socket编程之TCP原理

    一.Socket异常信息 之所以把对异常信息的介绍放到原理之前讲,是因为由于socket本身的复杂性,导致了产生各种异常的复杂性.我们应该时刻铭记的是,sokcet本身属于系统(OS),是系统对TCP ...

  8. Linux C socket 编程之TCP

    本文主要是,简单实现tcp连接的两个程序.本文编写,假设读者有socket 编程思想.熟悉C编程. 服务端: #include <stdio.h> #include <stdlib. ...

  9. 黑马程序员:Socket编程之(UDP vs TCP)

    ---------------------- ASP.Net+Unity开发. .Net培训.期待与您交流! ---------------------- UDP和TCP都是传输协议,设备之间遵循通讯 ...

最新文章

  1. 以假乱真的“人造脸”,能骗过面部识别吗?
  2. C/S架构程序多种类服务器之间实现单点登录(转)
  3. Failed to start mongod.service: Unit mongod.service not found
  4. 专有云传统HSF升级Pandora Boot开发
  5. 使用URL在线语音合成
  6. 前端学习(2309):react之同级传值
  7. 服务器运行容器工具大盘点!
  8. java的基本循环结构_Java基础之(九):循环结构
  9. android react混合开发框架,7个混合式移动开发框架
  10. keil格式化代码方法
  11. 【Elasticsearch教程13】Mapping字段类型之nested
  12. 安利这几款软件给需要的你
  13. Chrome浏览器内置截图工具(不需要安装插件)
  14. 朋也bbs开源学习(一)
  15. 数据可视化Echarts学习指南
  16. 何时“大庇天下寒士俱欢颜”(附笑话)
  17. 想学习C语言?这里有非常实用的C语言技巧,进来看看吧!
  18. (SVN笔记)SVN服务端+SVN客户端Tortoise——安装配置
  19. 拼多多回应将总部从中国迁至爱尔兰:严重失实;微软开放 Bing Chat 访问,无需等待;OpenAI 亏损翻倍|极客头条
  20. 【JavaScript-内置对象】找对象,那家好,内置对象错不了,方便简单,还好用

热门文章

  1. 第三章 进程管理笔记
  2. textBox的Key_Down事件
  3. android 常用命令随手记
  4. Java虚拟机工作原理具体解释
  5. IOS 预览pdf,word文档的集中方式
  6. Android网络通信的六种方式
  7. Linux 下 I/O 多路复用技术 epoll
  8. Linux操作Oracle(6)——Oracle11g OPatch 打补丁全纪录【Oracle11g windowsX64位环境+OPatch11.2.0.3.28】及资源下载
  9. Java三种类型之间的转换方法:Date、String、Calendar类型之间的转化
  10. 读书_w3c架构师01通用设计与方法论