`

UDP编程的服务器 Linux

阅读更多

 
UDP编程的服务器端一般步骤是:

1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();
4、循环接收数据,用函数recvfrom();
5、关闭网络连接;


UDP编程的客户端一般步骤是:

1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置对方的IP地址和端口等属性;
5、发送数据,用函数sendto();
6、关闭网络连接;

 
 
UDP的服务端:
 

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdlib.h>
//#include <signal.h>


#define MAXLINE 80
int port = 8000;

int main(void)
{
  struct sockaddr_in sin;
  struct sockaddr_in rin;
  int sock_fd;
  int address_size;
  char buf[MAXLINE];
  char str[INET_ADDRSTRLEN];
  int i;
  int len;
  int n;

  bzero(&sin, sizeof(sin));
  sin.sin_family = AF_INET;
  sin.sin_addr.s_addr = INADDR_ANY;
  sin.sin_port = htons(port);


  sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
  if (-== sock_fd)
  {
    perror("call to socket");
    exit(1);
  }
  n = bind(sock_fd, (struct sockaddr *)&sin, sizeof(sin));
  if (-== n)
  {
    perror("call to bind");
    exit(1);
  }

  while(1)
  {
    address_size = sizeof(rin);
    n = recvfrom(sock_fd, buf, MAXLINE, 0, (struct sockaddr *)&rin, &address_size);
    if (-== n)
    {
      perror("call to recvfrom.\n");
      exit(1);
    }
    printf("you ip is %s at port %d:%s\n",
            inet_ntop(AF_INET, &rin.sin_addr,str,sizeof(str)),
            ntohs(rin.sin_port),buf);
    len = strlen(buf);
    for (= 0; i < len; i++)
    {
      buf[i] = toupper(buf[i]);
    }
    n = sendto(sock_fd, buf, len+1, 0, (struct sockaddr *)&rin, address_size);
    if (-== n)
    {
      perror("call to sendto\n");
      exit(1);
    }
  }
}

 

UDP客户端:

 

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdlib.h>

#define MAXLINE 80
int port = 8000;

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

  struct sockaddr_in pin;
  struct sockaddr_in rin;
  int sock_fd;
  char buf[MAXLINE];
  char str[MAXLINE];
  char sip[INET_ADDRSTRLEN];
  int n;
  int address_size;

  bzero(&pin, sizeof(pin));
  pin.sin_family = AF_INET;
  inet_pton(AF_INET, "127.0.0.1", &pin.sin_addr);
  pin.sin_port = htons(port);
  
  sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
  if (-== sock_fd)
  {
    perror("call to socket");
    exit(1);
  }
  while(NULL != fgets(str,MAXLINE, stdin)) 
  {
    sendto(sock_fd, str, strlen(str) + 1, 0, (struct sockaddr *)&pin, sizeof(pin));
    if (-== n)
    {
      perror("call to sendto.\n");
      exit(1);
    }
    
    address_size = sizeof(rin);
    n = recvfrom(sock_fd, buf, MAXLINE, 0, (struct sockaddr *)&rin, &address_size);
    if (-== n)
    {
      perror("call to recvfrom.\n");
      exit(1);
    }
    else
    {
      printf("Response from %s port %d:%s\n",
            inet_ntop(AF_INET, &rin.sin_addr, sip, sizeof(sip)),
            ntohs(rin.sin_port),buf);
    }
  }
  close(sock_fd);
  if (-== n)
  {
    perror("call to close.\n");
    exit(1);
  }
  return 0;
}

 


分享到:
评论

相关推荐

    Linux UDP 编程步骤

    下面将详细介绍 Linux 下进行 UDP 编程的三个主要模型:基本服务器模型、循环服务器模型和并发服务器模型。 ### 1. 基本服务器模型 基本服务器模型是最简单的 UDP 服务器实现,通常用于接收单一客户端的请求。以下...

    udp.rar_linux udp服务器_linux upd_linux 服务器_udp服务器 Linux_upd sender

    本压缩包文件"udp.rar_linux udp服务器_linux upd_linux 服务器_udp服务器 Linux_upd sender"包含了一些关于在Linux上构建UDP服务器和客户端程序的资源。 首先,我们来看"www.pudn.com.txt"这个文件,通常这类文本...

    linux下udp编程

    本教程将深入探讨如何在Linux环境下进行UDP编程,包括客户端和服务器端的实现。 首先,理解UDP的特点至关重要。与TCP相比,UDP不提供连接建立、数据确认、流量控制或拥塞控制等服务,因此它的开销较小,但同时也...

    linux UDP编程总结和实例

    Linux UDP编程是网络编程中的一个重要部分,UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输层协议,适用于实时性要求高、对数据完整性要求不那么严格的应用场景。在这个主题中,我们将...

    udp.rar_Listen!_UDP 并发_UDP并发服务器_linux udp 并发_linux udp服务器

    综上所述,实现Linux下的UDP并发服务器涉及的关键技术点包括:UDP协议的理解、套接字编程、`fork()`创建子进程、`recvfrom()`和`sendto()`处理数据、进程管理以及可能的多线程编程。这些知识点是网络编程特别是...

    udp.rar_linux UDP_linux 服务器_udp 服务器_udp服务器 Linux

    在Linux环境下建立UDP服务器和客户端,我们需要了解以下几个关键知识点: 1. **套接字编程**:在Linux中,无论是TCP还是UDP,进行网络通信都离不开套接字(socket)编程。套接字是进程间通信的一种方式,提供了在...

    linux网络编程UDP服务器和客户端代码

    本资料包包含了一个简单的UDP服务器和客户端的示例代码,以及一个公共函数头文件,适用于学习和理解Linux下的UDP网络编程。 首先,我们来看服务器程序。在UDP服务器中,主要任务是创建一个socket,绑定到特定的IP...

    udp_server.zip_gcc udp_udp服务器 Linux

    总结来说,这个项目涵盖了UDP服务器编程的基本概念,使用了Linux环境和GCC编译器,以及C语言作为实现语言。理解这些知识点对于开发网络应用程序至关重要。通过阅读和分析`udp_server.c`源代码,你可以深入学习如何在...

    JAVA进行UDP编程

    下面将详细介绍Java进行UDP编程的相关知识点。 **一、UDP的特点** 1. **无连接性**:UDP不建立连接,直接发送数据,因此速度快,但可能会丢失数据或顺序错乱。 2. **不可靠性**:UDP不保证数据包的接收,也不检测和...

    udp_linux.rar_udp服务器 Linux

    本资料包“udp_linux.rar_udp服务器 Linux”显然是针对在Linux环境下构建UDP服务器的实践教程。 在构建UDP服务器时,主要涉及以下知识点: 1. **套接字(Sockets)编程**:套接字是网络通信中的接口,提供了进程间...

    linuxnet.rar_Linux 网卡 数据流_linux cudp编程_linux 测速_linuxnet_网络测速

    linux下的网卡测速程序,使用udp编写,同时也是一个很好的linux网络编程范例,cudp为客户端程序,而sudp为服务器程序

    linuxUDP下实现客户端与服务器端聊天模式

    总结,这个项目涵盖了Linux网络编程中的UDP协议、多线程技术以及客户端-服务器通信模型。通过实践这样的项目,开发者可以提升对网络编程的理解,学习如何处理并发连接,并熟悉Linux环境下的开发流程。

    tcp+udp.rar_TCP/IP_linux udp socket_linux 网络编程_socket linux udp

    描述中提到的"socket网络编程在linux下的实现,支持tcp/udp两种协议",这表明这个压缩包可能包含了示例代码或教程,教你如何在Linux系统中使用套接字API进行TCP和UDP编程。对于TCP,你可能会学习到如何建立连接、...

    UDP.rar_UDP_linux UDP_linux UDP makefile_udp linux

    在标签"udp linux_udp linux_udp__makefile udp_linux__"中,`linux_udp`和`udp_linux`暗示了这是与Linux系统相关的UDP编程,而`makefile_udp`提示我们项目中包含了一个`Makefile`,这是用于自动化编译和链接C或C++...

    linux tcpserver tcpclient udpserver udpclient select并发编程

    本文将深入探讨在Linux环境下,使用C语言实现TCP服务器(tcpserver)、TCP客户端(tcpclient)、UDP服务器(udpserver)以及UDP客户端(udpclient)的并发编程,并涉及select模型用于处理多个连接请求。以下是关于...

    Python网络编程(Linux)_网络编程_python_linux网络编程_

    Python网络编程在Linux环境下是一个强大的工具,用于构建服务器端应用程序和服务。这个主题涵盖了多个关键知识点,包括基础概念、Python的网络库、套接字编程、并发处理以及在Linux系统中的应用。 1. **网络编程...

    udp.rar_linux UDP_linux c udp_linux udp arm_udp linux

    Linux UDP编程是网络通信中的重要一环,尤其在嵌入式ARM开发板上,它扮演着不可或缺的角色。UDP,即用户数据报协议(User Datagram Protocol),是一种无连接的、不可靠的传输层协议,与TCP相比,它具有更低的开销和...

    Udp编程

    在这个“Udp编程”的主题中,我们将深入探讨UDP的基本原理、编程接口以及如何通过实例进行UDP客户端和服务器的开发。 首先,理解UDP的特点至关重要。与TCP(Transmission Control Protocol)不同,UDP不提供连接...

    linux下tcp udp编程 小例子

    总结来说,Linux下的TCP和UDP编程涉及理解网络通信的基础概念,熟练掌握socket API的使用,以及对协议特性的深入理解。通过实践这些小例子,开发者可以更好地理解这两种协议的工作方式,并为开发网络应用程序打下...

    linux下多线程udp网络编程实现消息驱动多状态机流转1

    linux下多线程udp网络编程实现消息驱动多状态机流转,收发一体

Global site tag (gtag.js) - Google Analytics