下面是UDP的服务器的代码:

  1. /* server.c */
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <netinet/in.h>
  5. #include <arpa/inet.h>
  6. #include <ctype.h>
  7. #include "wrap.h"
  8.  
  9. #define MAXLINE 80
  10. #define SERV_PORT 8000
  11.  
  12. int main(void)
  13. {
  14. struct sockaddr_in servaddr, cliaddr;
  15. socklen_t cliaddr_len;
  16. int sockfd;
  17. char buf[MAXLINE];
  18. char str[INET_ADDRSTRLEN];
  19.  
  20. int i, n;
  21.  
  22. sockfd = wrap_socket(AF_INET, SOCK_DGRAM, 0);
  23.  
  24. bzero(&servaddr, sizeof(servaddr));
  25. servaddr.sin_family = AF_INET;
  26. servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
  27. servaddr.sin_port = htons(SERV_PORT);
  28.  
  29. wrap_bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
  30.  
  31. printf("Accepting connections ...\n");
  32. while(1)
  33. {
  34. cliaddr_len = sizeof(cliaddr);
  35. n = recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr *)&cliaddr, &cliaddr_len);
  36.  
  37. if(n == -1)
  38. {
  39. perr_exit("recvfrom error");
  40. }
  41. printf("received from %s at port %d\n",
  42. inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)),
  43. ntohs(cliaddr.sin_port));
  44. for(i = 0; i < n; ++i)
  45. {
  46. buf[i] = toupper(buf[i]);
  47. }
  48.  
  49. n = sendto(sockfd, buf, n, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr));
  50. if(n == -1)
  51. perr_exit("sendto error!");
  52. }
  53. }

客户端代码:

  1. /* client.c */
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <netinet/in.h>
  6. #include <arpa/inet.h>
  7. #include "wrap.h"
  8.  
  9. #define MAXLINE 80
  10. #define SERV_PORT 8000
  11.  
  12. int main(int argc, char *argv[])
  13. {
  14. struct sockaddr_in servaddr;
  15. int sockfd, n;
  16. char buf[MAXLINE];
  17. char str[INET_ADDRSTRLEN];
  18. socklen_t servaddr_len;
  19.  
  20. sockfd = wrap_socket(AF_INET, SOCK_DGRAM, 0);
  21.  
  22. bzero(&servaddr, sizeof(servaddr));
  23. servaddr.sin_family = AF_INET;
  24. inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
  25. servaddr.sin_port = htons(SERV_PORT);
  26.  
  27. while(fgets(buf, MAXLINE, stdin) != NULL)
  28. {
  29. n = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr));
  30. if(n == -1)
  31. perr_exit("sendto error");
  32.  
  33. n = recvfrom(sockfd, buf, MAXLINE, 0, NULL, 0);
  34. if(n == -1)
  35. perr_exit("recvfrom error");
  36.  
  37. wrap_write(STDOUT_FILENO, buf, n);
  38. }
  39.  
  40. wrap_close(sockfd);
  41. return 0;
  42. }

由于server和client没有先建立连接然后通信的条件,所以server可以有并发能力。

用Ctrl+C关闭server,然后再运行server,client还能和server联系上。

linux下socket编程-UDP的更多相关文章

  1. Linux下socket编程基本知识

    本文档主要讲解了Linux下socket编程的一些基本知识,主要包括套接字和字节序的概念,以及一些常用的结构体和函数. 本文是在网易云课堂学习过程中的记录,这个老师讲得很不错,推荐大家围观. Linu ...

  2. Linux下Socket编程的端口问题( Bind error: Address already in use )

    Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...

  3. linux下socket编程实例

    linux下socket编程实例一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.s ...

  4. LInux下socket编程学习笔记

    1.socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模 ...

  5. 3、linux下Socket编程-TCP/UDP

    1.什么是Socket 网络的 Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返 回一个整型的Socke ...

  6. linux下socket编程

    相关结构 //下边这两个结构定义在<sys/types.h>里 //一般的地址结构,只能用于覆盖(把其他地址转换为此类型),且只能引用该地址的sa_family字段 struct sock ...

  7. linux下socket编程-进程间通信

    一.什么是Socket Socket接口是TCP/IP网络通信的API,Socket接口定义了许多函数或例程,可以用它们来开发TCP/IP网络上的应用程序. Socket类型有两种:流式Socket ...

  8. [转] - linux下socket编程实例

    一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.socket也有一个类似于打开文件 ...

  9. c++ 网络编程(七) LINUX下 socket编程 基于套接字的标准I/O函数使用 与 fopen,feof,fgets,fputs函数用法

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614820.html 一.标准I/O 1,什么是标准I/O?其实是指C语言里的文件操作函数,如 ...

随机推荐

  1. js取整数、取余数的方法

    1.丢弃小数部分,保留整数部分 parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入. Math.round(5/2) 4,向下取整 Math.f ...

  2. 浅谈HTML5拖放

    现在,新增的HTML5元素很多,也给开发者带来了很多便利,比如说:结构标记header .nav.arctile.section.footer 表单元素:url.date.emaile.search. ...

  3. linux网络编程:使用单进程实现多客户端通信

    服务端: //回射服务器 //避免僵尸进程 #include "unistd.h" #include "sys/types.h" #include " ...

  4. ios html5 长按复制文本

    以前做的项目,主要是针对ios的,安卓上面也没有测试. 原理其实是系统自带的功能,那时候借鉴的其他网站,没有试验通过document.execCommand("Copy"),别的j ...

  5. shopnc数据库 批量修改商品价格

    1.商品价格统一上调50 2.商品价格个别上调50 UPDATE `nc_goods` SET `goods_price` = `goods_price` +50 where goods_id!=10 ...

  6. Linux下源码编译安装rpy2

    R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具.rpy2是Python直接调用R的第三方库,它可以实现使用python读取R的对象.调用R的方法以及Python与R数据结构转换等.这 ...

  7. netty实现消息转发服务

    1.结构图 2.消息服务器 消息服务器(SNS)由Http Netty Server(HNS)和WebSocket Netty Server(WNS)组成.HNS采用Netty Http+XML协议栈 ...

  8. codeforces 518A. Vitaly and Strings

    A. Vitaly and Strings time limit per test 1 second memory limit per test 256 megabytes input standar ...

  9. C#中委托和事件

    目 录 将方法作为方法的参数 将方法绑定到委托 更好的封装性 限制类型能力 范例说明 Observer 设计模式简介 实现范例的Observer 设计模式 .NET 框架中的委托与事件 为什么委托定义 ...

  10. WSImport

    http://www.cnblogs.com/simle/archive/2011/11/03/2233417.html