精华内容
下载资源
问答
  • udp服务器

    2018-07-20 20:52:42
    无连接的不可靠的服务用udp 1. 创建数据报套接字 2. 绑定本地IP和端口 3. 收发信息 recvfrom(BUFFERSIZE) 功能:在udp中接收消息 参数:buffersize表示一次最多可以接收到多少字节的消息 返回值:data接收到...

    无连接的不可靠的服务用udp
    1. 创建数据报套接字
    2. 绑定本地IP和端口
    3. 收发信息
    recvfrom(BUFFERSIZE)
    功能:在udp中接收消息
    参数:buffersize表示一次最多可以接收到多少字节的消息
    返回值:data接收到的消息,addr从哪个客户端接收到的消息
    sendto(data,addr)
    功能:向一个网络终端发送消息
    参数:data要发送的消息(bytes),addr要发送对象的地址
    4. 关闭套接字


    udp客户端:
    1. 创建数据报套接字
    2. 消息收发
    3. 关闭套接字

    from socket import *
    import sys
    
    #从命令行传入IP和端口
    HOST=sys.argv[1]
    PORT=int(sys.argv[2])
    ADDR=(HOST,PORT)
    
    
    #创建数据报套接字
    sockfd=socket(AF_INET,SOCK_DGRAM,)
    
    #绑定本地IP和端口号
    sockfd.bind(ADDR)
    
    #接收消息
    while True:
        data,addr=sockfd.recvfrom(BUFFERSIZE)
        print("recv from",addr,':',data.decode())
        sockfd.sendto(("在%s 接收到你到消息"%ctime()).encode(),addr)
    
    #关闭套接字
    sockfd.close()
    

    总结:tcp与udp区别
    1. tcp有连接,udp无连接
    2. tcp 有三次握手和四次挥手,udp无
    3. tcp上以数据流传输数据,有粘包,udp是数据报形式没有粘包
    4. tcp的连接需要消耗一定的资源,相比之下,udp资源消耗少
    5. tcp保证数据的可靠性,udp无保证
    6. tcp需要listen,accept,connect ,udp不需要这些操作


    socket模块
    套接字属性
    getpeername()
    功能:用作服务器连接套接字,查看连接的客户端地址


    循环服务器模型,循环处理客户端的请求,处理完一个继续处理下一个
    缺点:不能同时处理多个请求,不允许某个客户端长期占用服务器资源,
    因为udp不需要进行连接,所以循环服务器模型更加适合udp通信。
    并发服务器模型
    每有一个客户端就创建一个 进程/现成处理客户端的具体请求事情,而主进程/主线程 继续接收其他客户端的连接

    fork
    1. 创建套接字 绑定 监听
    2. 接收客户端连接请求 创建新的进程
    3. 主进程继续接收下一个客户端连接请求,子进程处理客户端事件
    4. 有客户端则关闭相应的子进程

    展开全文
  • UDP服务器客户端.rar

    2020-04-05 15:31:40
    UDP服务器客户端.rar UDP服务器客户端.rar UDP服务器客户端.rar UDP服务器客户端.rar UDP服务器客户端.rar UDP服务器客户端.rar
  • 创建UDP服务器

    千次阅读 2018-12-27 10:00:11
    UDP服务器也可以通过使用 socketserver 库很容易的被创建。 先定义一个实现 handle() 特殊方法的类,为客户端连接服务。 这个类的 request 属性是一个包含了数据报和底层socket对象的元组。client_address 包含了...

    实现一个基于UDP协议的服务器来与客户端通信。
    UDP服务器也可以通过使用 socketserver 库很容易的被创建。

    先定义一个实现 handle() 特殊方法的类,为客户端连接服务。 这个类的 request 属性是一个包含了数据报和底层socket对象的元组。client_address 包含了客户端地址。

    from socketserver import BaseRequestHandler, UDPServer
    import time
    
    
    class TimeHandler(BaseRequestHandler):
        def handle(self):
            print('Got connection from', self.client_address)
            message, sock = self.request
            resp = time.ctime()
            sock.sendto(resp.encode('ascii'), self.client_address)
    
    
    if __name__ == '__main__':
        serv = UDPServer(('', 16888), TimeHandler)
        serv.serve_forever()
    -----------------------------
    from socket import socket, AF_INET, SOCK_DGRAM
    s = socket(AF_INET, SOCK_DGRAM)
    s.sendto(b'', ('localhost', 16888))
    print(s.recvfrom(8192))
    

    UDPServer 类是单线程的,一次只能为一个客户端连接服务。 如果想要并发操作,可以实例化一个 ForkingUDPServer 或 ThreadingUDPServer 对象

    from socketserver import ThreadingUDPServer
    
       if __name__ == '__main__':
        serv = ThreadingUDPServer(('',20000), TimeHandler)
        serv.serve_forever()
    
    • 可以直接使用socket
    from socket import socket, AF_INET, SOCK_DGRAM
    import time
    
    def time_server(address):
        sock = socket(AF_INET, SOCK_DGRAM)
        sock.bind(address)
        while True:
            msg, addr = sock.recvfrom(8192)
            print('Got message from', addr)
            resp = time.ctime()
            sock.sendto(resp.encode('ascii'), addr)
    
    if __name__ == '__main__':
        time_server(('', 16888))
    
    展开全文
  • 使用Socket实现的异步TCP服务器、同步TCP服务器、异步UDP服务器、同步UDP服务器 and 使用TcpListener和UdpClient实现的异步TCP服务器
  • 由于最近项目用到udp服务器。而我手头又没有DTU,想把串口数据发到服务器,所以写了个简单的串口转UDP工具。需要用到虚拟串口
  • C#各种类型TCP&UDP服务器代码

    热门讨论 2015-03-18 11:09:02
    使用Socket实现的异步TCP服务器、同步TCP服务器、异步UDP服务器、同步UDP服务器 and 使用TcpListener和UdpClient实现的异步TCP服务器
  • UDP服务器的实现

    2018-09-06 21:22:07
    UDP是一种面向无连接的不可靠传输协议,有处理速度快、消耗资源小的特点。   好奇UDP通讯怎么实现并发服务。TCP可以通过监听服务,创建新的会话,实现并发;...//UDP服务器的实现 #include <st...

    UDP是一种面向无连接的不可靠传输协议,有处理速度快、消耗资源小的特点。

     

    好奇UDP通讯怎么实现并发服务。TCP可以通过监听服务,创建新的会话,实现并发;

    UDP没有这种监听机制,如何实现并发?

     

    其实,UDP本身就可连接多个客户端。UDP是不区分客户端,也不需要等待客户端的连接请求。

    这样就不用并发处理了。

     

    //UDP服务器的实现
    
    #include <stdio.h>   //printf
    #include <arpa/inet.h>   //inet_addr htons
    #include <sys/types.h>
    #include <sys/socket.h>  //socket 
    #include <netinet/in.h>  //sockaddr_in
    #include <stdlib.h>  //exit
    #include <unistd.h> //close
    #include <string.h> //strcat
    #include <strings.h> 
    
    #define errlog(errmsg) do{perror(errmsg);\
    						  printf("%s,%s,%d\n", __FILE__, __func__, __LINE__);\
                              exit(1);\
    						 }while(0)
    #define N 128
    
    int main(int argc, const char *argv[])
    {
    	int sockfd;
    	struct sockaddr_in server_addr, client_addr;
    	socklen_t addrlen = sizeof(struct sockaddr_in);
    	char buf[N] = {};
    
    	//bzero  memset
    	bzero(&client_addr, sizeof(client_addr));
    	bzero(&server_addr, sizeof(client_addr));
    
    	if(argc < 3)
    	{
    		printf("argument is too less\n");
    		exit(1);
    	}
    
    	//创建套接字  --->  socket( )
    	if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
    	{
    		//errlog("fail to socket");
    		perror("fail to socket");
    		exit(1);
    	}
    
    	//填充服务器网络信息结构体 sockaddr_in
    	//inet_addr : 将点分十进制IP地址转化为网络能够识别的整型数据
    	//htons : 将主机字节序转化为网络字节序
    	//atoi :将字符串转化为整型数据
    	server_addr.sin_family = AF_INET;
    	server_addr.sin_addr.s_addr = inet_addr(argv[1]);
    	server_addr.sin_port = htons(atoi(argv[2]));
    
    	//将套接字与网络信息结构体绑定 ---> bind( )
    	if(bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0)
    	{
    		errlog("fail to bind");
    	}
    	
    	while(1)
    	{
    		if(recvfrom(sockfd, buf, N, 0, (struct sockaddr *)&client_addr, &addrlen) < 0)
    		{
    			errlog("fail to recvfrom");
    		}
    
    		printf("%s ---> %d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
    
    		if(strncmp(buf, "break", 5) == 0)
    		{
    			break;
    		}
    		else
    		{
    			printf("from client >>> %s\n", buf);
    
    			strcat(buf, " *_*");
    
    			if(sendto(sockfd, buf, N, 0, (struct sockaddr *)&client_addr, addrlen) < 0)
    			{
    				errlog("fail to sendto");
    			}
    		}
    	}
    
    	close(sockfd);
    
    	return 0;
    }


     

    展开全文
  • 简单udp服务器实现

    2010-01-26 20:05:08
    简单udp服务器实现 一本书上的光盘中的实例
  • UDP 服务器代码如下: #include &amp;amp;lt;arpa/inet.h&amp;amp;gt; #include &amp;amp;lt;netine...

    一:UDP

    服务器代码如下:

    #include <arpa/inet.h>                                                                                                                                         
    #include <netinet/in.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define SIZE 128
    
    
    
    void service(int sock)
    {
        char buf[SIZE];
        while(1)
        {
            //用来接收发送主机的网络信息
            struct sockaddr_in peer;
            socklen_t len = sizeof(peer);
    
            buf[0] = 0;//清空缓冲区
    
            //接收消息
            ssize_t s = recvfrom(sock, buf, sizeof(buf)-1, 0, (struct sockaddr*)&peer, &len);//-1是因为回车也会被输入
            if(s > 0)
            {
                buf[s] = 0;
                printf("[%s:%d]# %s\n",inet_ntoa(peer.sin_addr), ntohs(peer.sin_port), buf);
            }
    
            //发送消息
            sendto(sock, buf, sizeof(buf), 0, (struct sockaddr*)&peer, len);
    
        }
    }
    
    
    //要用命令行参数将启动服务器的主机的IP地址和端口号传过来
    // ./udp_server 192.168.17.130 8080(测试的时候可以使用本地回环地址127.0.0.1)
    int main(int argc, char* argv[])
    {
        //检测传参个数是否正确
        if(argc != 3)
        {
            printf("Usage: %s [ip] [port]\n", argv[0]);
            exit(1);
        }
    
        //创建socket文件描述符
        int sock = socket(AF_INET, SOCK_DGRAM, 0);//这里返回的sock就是文件描述符
        if(sock < 0)
        {
            perror("sock");
            exit(2);
        }
    
        struct sockaddr_in local;
        local.sin_family = AF_INET;//设置地址类型
        local.sin_port = htons(atoi(argv[2]));//设置端口号
        local.sin_addr.s_addr = inet_addr(argv[1]);//设置IP地址--先将字符串风格的IP地址转化为整数
    
        //将文件描述符与网络相关信息(local)绑定,并绑定端口号
        //因为IPv4的结构类型为sockaddr_in,所以需要强转
        if(bind(sock, (struct sockaddr*)&local, sizeof(local)) < 0)
        {
            perror("bind");
            exit(3);
        }
    
        //do some server
        //先接收客户端的消息,再将消息返回
        service(sock);
    
    
        close(sock);
        return 0;
    
    }            

    客户端代码如下:

    #include <arpa/inet.h>                                                                                                                                         
    #include <netinet/in.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    //用命令行参数来接收服务器主机的IP地址和端口号
    // ./udp_client 192.168.17.130
    int main(int argc, char* argv[])
    {
        //判断参数个数是否正确
        if(argc != 3)
        {   
            printf("Usage: %s [IP][port]", argv[0]);
            exit(1);
        }   
    
        //创建socket文件描述符
        int sock = socket(AF_INET, SOCK_DGRAM, 0); 
        if(sock < 0)
        {   
            printf("sock error!\n");
            exit(2);
        }   
    
        char buf[128];
        struct sockaddr_in server;//用来设置服务器相关信息
        server.sin_family = AF_INET;
        server.sin_port = htons(atoi(argv[2]));
        server.sin_addr.s_addr = inet_addr(argv[1]);
        int len = sizeof(server);//因为式UDP,发送和接收的单位都是数据报
        while(1)
        {   
            buf[0] = 0;//清空缓冲区
    
            //从标准输入读取数据放在buf
            ssize_t s = read(0, buf, sizeof(buf)-1);
            if(s > 0)
            {
                buf[s-1] = 0;
    
                //向服务器发送消息
                sendto(sock, buf, sizeof(buf), 0, (struct sockaddr*)&server, len);
                //接收服务器消息
               s = recvfrom(sock, buf, sizeof(buf)-1, 0, NULL, NULL);
               if(s > 0)
               {
                   buf[s] = 0;
                   printf("server echo# %s\n", buf);
               }
            }
        }
    
    }                      

    二:TCP

    服务器代码如下:

      #include <string.h>                                                                                                                                          
      #include <arpa/inet.h>
      #include <netinet/in.h>
      #include <sys/types.h>
      #include <sys/socket.h>
      #include <stdio.h>
      #include <stdlib.h>
      #include <unistd.h>
    
      #define SIZE 128
    
      int startup(char* ip, int port)
      {    
          //创建socket文件描述符
          //这里使用的是tcp协议,所以类型是SOCK_STREAM
          int sock = socket(AF_INET, SOCK_STREAM, 0); 
          if(sock < 0)
          {   
              perror("socket");
              exit(2);
          }   
    
          //设置sock相关网络信息
          struct sockaddr_in local;
          local.sin_family = AF_INET;//将地址类型设置为IPv4
          local.sin_port = htons(port);//将字节序转化为网络字节序
          local.sin_addr.s_addr = inet_addr(ip);//将字符串风格ip地址转化为整数
    
          //将网络信息和sock绑定
          if(bind(sock, (struct sockaddr*)&local, sizeof(local)) < 0)
          {   
              perror("bind");
              exit(3);
          }   
    
          //将sock设置为监听状态
          //第二个参数为等待队列的长度,通常设置为5-10
          if(listen(sock, 5) < 0)
          {
              perror("listen");
              exit(4);
          }
    
          return sock;
      }
    
      void service(int sock, char* ip, int port)
      {
          char buf[SIZE];
          while(1)
          {
              //因为tcp协议面向字节流,所以可以直接用read和write
              ssize_t s = read(sock, buf, sizeof(buf)-1);//减1是因为输入也会将回车输进来
              if(s > 0)//表示读成功,实际读的大小为s
              {
                  buf[s] = 0;//将\0设置进去
                  printf("[%s:%d] say#%s\n", ip, port, buf);
                  write(sock, buf, strlen(buf));
              }
             else if(s = 0)//表示对方已关闭,断开连接
              {
                  printf("client [%s:%d] quit\n", ip, port);
                  break;
              }
              else
              {
                  perror("read");
                  break;
              }
          }
      }
    
    
      //测试的时候可以使用本地回环地址127.0.0.1
      //用命令行参数将启动服务器的IP地址和端口号传进来
      // ./tcp_server 127.0.0.1 8080
    int main(int argc, char* argv[])
      {
          if(argc != 3)
          {
              printf("Usage: %s [ip] [port]", argv[0]);
              exit(1);
          }
    
          int listen_sock = startup(argv[1], atoi(argv[2]));
    
          struct sockaddr_in peer;
          char ipBuf[24];
          while(1)
          {
              ipBuf[0] = 0;//清空缓冲区
              socklen_t len = sizeof(peer);
    
              //请求连接,反回真正用来通信的socket文件描述符
              //因为listen_sock一直处于监听状态,如果有客户端想要建立连接,
              //就会由listen_sock将客户端信息传过来,等到连接成功或失败,它就继续去监听
              //第二个参数用来返回客户机的信息
              int new_sock = accept(listen_sock, (struct sockaddr*)&peer, &len);
    
              //如果请求连接失败,继续
              if(new_sock < 0)
              {
                  perror("accept");
                  continue;
              }
    
              inet_ntop(AF_INET, (struct sockaddr*)&peer.sin_addr, ipBuf, sizeof(ipBuf));
              printf("get a new connect,[%s:%d]\n", ipBuf, ntohs(peer.sin_port));
    
              service(new_sock, ipBuf, ntohs(peer.sin_port));
              close(new_sock);                                                                                                                                     
          }
    
          return 0;
    }

    客户端代码如下:

    #include <string.h>                                                                                                                                            
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define SIZE 128
    
    int main(int argc, char* argv[])
    {
        if(argc != 3)
        {   
            printf("Usage:%s [ip] [port]", argv[0]);
            exit(1);
        }   
    
        //创建socket文件描述符
        int sock = socket(AF_INET, SOCK_STREAM, 0); 
        if(sock < 0)
        {   
            perror("socket");
            exit(2);
        }   
    
        struct sockaddr_in server;
        server.sin_addr.s_addr = inet_addr(argv[1]);
        server.sin_family = AF_INET;
        server.sin_port = htons(atoi(argv[2]));
    
        if(connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0)
        {   
            perror("connect");
            exit(3);
        }      
        char buf[SIZE];
        while(1)
        {
            buf[0] = 0;//清空缓冲区
            printf("Please Enter:");
            fflush(stdout);
            ssize_t s = read(0, buf, sizeof(buf));
            if(s > 0)
            {
                buf[s-1] = 0;
                if(strncmp("quit", buf, 4) == 0)
                {
                    printf("client quit!\n");
                    break;
                }
    
                write(sock, buf, strlen(buf));
                s = read(sock, buf, sizeof(buf)-1);
                buf[s] = 0;
                printf("Server Echo# %s\n", buf);
            }
        }
    
        close(sock);
        return 0;
    }                                           

    相关接口使用方法可参考:https://blog.csdn.net/virgofarm/article/details/80696730

    三:TCP与UDP区别

    • TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
    • TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
    • UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
    • 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
    • TCP面向字节流;UDP面向数据报。
    • TCP对系统资源要求较多,UDP对系统资源要求较少。
    展开全文
  • python学习:编写TCP服务器&UDP服务器

    千次阅读 2016-07-05 10:26:38
    python学习:编写TCP服务器... 环境:主机:WIN10python版本:3.4开发环境:pyCharm 5.0.2说明:项目需求,编写了TCP服务器和UDP服务器负责接收和转发数据。源代码:# 导入socket库: import socket import threading # imp
  • UDP服务器客户端相互通信

    千次阅读 2016-11-22 22:34:58
    UDP服务器、客户端之间的相互通信 之前的版本只能实现UDP服务器之间单发单收,此版本能实现UDP服务器和客户端之间的相互通信。 见下面的程序: udp_server.c #include #include #include #include #include ...
  • C++ 实现简单Udp服务器

    2020-06-10 15:14:07
    使用C++基于windows平台下实现Udp服务器 main.cpp #include <winsock2.h> #include <WS2tcpip.h> #include <iostream> using namespace std; //添加动态库的lib #pragma comment(lib, "ws2_32....
  • 2,udp服务器:绑定自己的地址和端口号 udp客户端:绑定对方(服务器)的IP地址和端口号 客户端自己的端口号和IP地址与服务器是不一样的 比如使用udp: 端口号是一样的,客户端以服务器为准 客户端是192.168....
  • 在QT下的UDP服务器和客户端的简单DEMO,实现相互发送数据。
  • 套接字实现Udp服务器

    2017-07-08 11:29:53
    上一篇博客讲述了怎么使用...今天我们来看看怎么使用套接字socket实现Udp服务器吧! 1、使用socket套接字实现Udp服务器 1.1、简单介绍实现方法 代码实现Udp服务器——客户端 udp不可靠, 了解如何在用户空间实现可靠性
  • UDP服务器和客户端交互

    万次阅读 2015-08-17 10:51:05
    实验三 UDP服务器端程序设计 一、实验目的 学习和掌握Linux下的UDP服务器基本原理和基本编程方法,体会与TCP的区别,TCP编程:http://blog.csdn.net/yueguanghaidao/article/details/7035248 二、实验平台...
  • UDP服务器程序

    2016-05-03 16:37:24
    本程序是的功能是接收UDP客户端的消息,并且可以向UDP客户端发送数据
  • 这是关于esp8266自己开发SDK固件实现建立TCP、UDP服务器端的程序demo,参考这里的例程可以更快熟悉程序流程。
  • TCP和UDP服务器性能测试工具

    万次阅读 2018-01-03 18:01:47
    TCP和UDP服务器性能测试工具本文涉及工具不是本人开发,在网上免费下载的工具在编写一个网络服务的时候都比较关心这个服务能达到多少并发连接,而在这连接的基础上又能达到一个怎样的交互能力.编写服务已经是一件很花...
  • 前面我们已经完成了LwIP协议栈基于逻辑的基本移植,在这一节我们将以RAW API来实现UDP服务器。 1、UDP协议简述  UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在...
  • I UDP 交互原理 II UDP 服务器端代码示例 III UDP 客户端代码示例 IV 服务器 客户端 运行结果

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,382
精华内容 8,952
关键字:

udp服务器