服务器端

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <string.h>
  6. #include <netinet/in.h>
  7.  
  8. #define MAXLINE 80
  9. #define SERV_PORT 8888
  10.  
  11. void do_echo( int sockfd, struct sockaddr *pcliaddr, socklen_t client )
  12. {
  13. int n;
  14. socklen_t len;
  15. char mesg[];
  16. while ()
  17. {
  18. len = client;
  19. n = recvfrom( sockfd, mesg, , , pcliaddr, &len );
  20. sendto( sockfd, mesg, n, , pcliaddr, len );
  21. mesg[n] = ;
  22. fputs( mesg, stdout );
  23. }
  24. return;
  25. }
  26.  
  27. int main( void )
  28. {
  29. int sockfd;
  30. struct sockaddr_in servaddr, cliaddr;
  31. sockfd = socket( AF_INET, SOCK_DGRAM, );
  32. bzero( &servaddr, sizeof(servaddr) );
  33. servaddr.sin_family = AF_INET;
  34. servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  35. servaddr.sin_port = htons(SERV_PORT);
  36. if ( bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) == - )
  37. {
  38. perror("bind error");
  39. exit();
  40. }
  41. do_echo( sockfd, (struct sockaddr *)&cliaddr, sizeof(cliaddr) );
  42. return ;
  43. }

客户端

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/socket.h>
  5. #include <string.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. #include <unistd.h>
  9.  
  10. #define MAXLINE 80
  11. #define SERV_PORT 8888
  12.  
  13. void do_cli( FILE *fp, int sockfd, struct sockaddr *pservaddr, socklen_t servlen )
  14. {
  15. int n;
  16. char sendline[MAXLINE], recvline[MAXLINE + ];
  17. if ( connect( sockfd, (struct sockaddr *)pservaddr, servlen ) == - )
  18. {
  19. perror("connect error");
  20. exit();
  21. }
  22.  
  23. while ( fgets(sendline, MAXLINE, fp ) != NULL )
  24. {
  25. write( sockfd, sendline, strlen(sendline) );
  26. n = read( sockfd, recvline, MAXLINE );
  27. if ( n == - )
  28. {
  29. perror("read error");
  30. exit();
  31. }
  32. recvline[n] = ;
  33. fputs( recvline, stdout );
  34. }
  35. return;
  36. }
  37.  
  38. int main( int argc, char **argv )
  39. {
  40. int sockfd;
  41. struct sockaddr_in servaddr;
  42. if ( argc != )
  43. {
  44. printf("usage: udpclient <IPaddress>\n");
  45. exit();
  46. }
  47.  
  48. bzero( &servaddr, sizeof(servaddr) );
  49. servaddr.sin_family = AF_INET;
  50. servaddr.sin_port = htons(SERV_PORT);
  51.  
  52. if ( inet_pton(AF_INET, argv[], &servaddr.sin_addr ) <= )
  53. {
  54. printf("[%s] is not a valid IPaddress\n", argv[]);
  55. exit();
  56. }
  57.  
  58. sockfd = socket(AF_INET, SOCK_DGRAM, );
  59. do_cli( stdin, sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr) );
  60. return ;
  61. }

Linux 简单socket实现UDP通信的更多相关文章

  1. Linux 简单socket实现TCP通信

    服务器端代码 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <stri ...

  2. C# 通过socket实现UDP 通信

    UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎.在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重.但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小, ...

  3. Linux C socket 基于 UDP

    /*************************************************************************     > File Name: serve ...

  4. [C++] socket - 2 [UDP通信C/S实例]

    服务端: #include<iostream> #include<winsock2.h> #include<stdio.h> #pragma comment(lib ...

  5. linux下socket编程-UDP

    下面是UDP的服务器的代码: /* server.c */ #include <stdio.h> #include <string.h> #include <netine ...

  6. Linux ---> 简单socket

    #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> ...

  7. C#的Socket实现UDP协议通信

    今天稍花化了一点时间,利用C#的Socket验证了UDP的通信,为接下来特地利用UDP做个分布式的通信仿真系统打下基础.众所周知,UDP 就是用户数据报协议,在互联网参考模型的第四层——传输层.与TC ...

  8. Python的网络编程[0] -> socket[2] -> 利用 socket 建立 TCP/UDP 通信

    Socket 目录 socket 的 TCP/IP 通信基本建立过程 socket 的 UDP 通信基本建立过程 socket 的 UDP 广播式通信基本建立过程 socket 的多线程通信建立过程 ...

  9. ACE_linux:UDP通信

    1.涉及类 ACE_INET_Addr//ACE网络地址ACE_SOCK_Dgram//ACE报文 2.简介 UDP通信时无需像TCP那样建立连接和关闭连接,TCP编程时需要通过accept和conn ...

随机推荐

  1. 记录一次LOB损坏导致的EXPDP导出ORA-01555报错

    同事导出数据,结果遇到如下报错: expdp user1/XXXXXXXX directory=szdata1 dumpfile=szhzinfo_20180319.dmp logfile=szhzi ...

  2. DB2表空间重定向恢复数据库实战

    DB2的备份恢复有点坑,当源系统和目标系统的路径设置不同时,要手动进行重定向恢复,本文是我一次实战操作之后总结的过程,仅供参考. 一.发出重定向恢复命令 DB2 RESTORE DB TO " ...

  3. 编写可维护的JavaScript---事件处理

    在JavaScript应用中事件处理是非常重要的,所有的JavaScript都是通过事件绑定到UI上的. 1. 典型用法 当事件触发的时候,事件对象event会最为回调参数传入到事件处理程序中.eve ...

  4. swiper不能手指滑动翻页的解决办法

    /*当swiper中的slide的里面放入长度在手机上不能滑动的时候 放入这段代码就可以了*/    var startScroll, touchStart, touchCurrent;        ...

  5. 【模板】概率dp

    有n个投资事件,和一个成功概率最低接受值rate.每个投资的价值是c[i],成功概率是p[i](浮点数). 在保证成功概率≥rate的情况下,使价值最大化. #include<bits/stdc ...

  6. Spirng+SpringMVC+Mybatis(一)

    实习之后都是在别人搭配好环境的情况下进行一些业务的编写,脑袋已经不记得如何搭建一个ssm项目的,所以周末有空补了一下. 首先新建一个test数据库,并且在里面插入三条数据.如图下 编写一个User B ...

  7. JavaScript鼠标事件

    mousedown 鼠标被按下. mouseup 鼠标按钮被释放(抬起). click 鼠标左键(或中建)被单击. 事件触发顺序:mousedown>mouseup>click>db ...

  8. thinkphp模板如何转换时间格式?

    <!-- 如果有日期输出,即$data.time不为空且不为0,则格式化时间戳,否则默认当前时间戳,并格式化成日期格式 --> {$data.time|default=time()|dat ...

  9. 解决url传递过程中加号变空格的问题

    url传递过程中加号变空格 在接收url参数的过程中,会发现如果参数中存在‘+’号,接收后会变成空格. 如11+22接收后变成11 22. 要解决这个问题,需要将加号替换为%2B进行传递. 如11%2 ...

  10. 廖老师的Python教程——安装Python

    因为Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的. 要开始学习Python编程,首先 ...