一个超简单的UDP网络程序

实现简单UDP客户端和服务器端

服务器端:
#include <stdio.h>                                                                                                                                     
  #include <string.h>                                                                                                                                    
  #include <stdlib.h>                                                                                                                                    
  #include <unistd.h>                                                                                                                                    
  #include <sys/socket.h>                                                                                                                                
  #include <netinet/in.h>                                                                                                                                
  #include <arpa/inet.h>                                                                                                                                 
  typedef struct sockaddr sockaddr;                                                                                                                      
  typedef struct sockaddr_in sockaddr_in;                                                                                                                
int main(int argc,char* argv[]) {                                                                                                                      
   int sock = socket(AF_INET,SOCK_DGRAM,0);                                                                                                              
   if (sock<0)                                                                                                                                           
   {                                                                                                                                                     
   perror("socket");                                                                                                                                     
   return 2;                                                                                                                                             
   }                                                                                                                                                     
    struct sockaddr_in local;                                                                                                                            
    local.sin_family=AF_INET;                                                                                                                            
    local.sin_port=htons(atoi(argv[1]));                                                                                                                 
    local.sin_addr.s_addr=htonl(INADDR_ANY);                                                                                                             
  if (bind(sock,(struct sockaddr*)&local,sizeof(local))<0)                                                                                               
  {                                                                                                                                                      
  perror("bind");                                                                                                                                        
  return 3;                                                                                                                                              
  }                                                                                                                                                      
  char buf[1024];                                                                                                                                        
  struct sockaddr_in client;                                                                                                                             
  while(1)                                                                                                                                               
  {                                                                                                                                                      
    socklen_t len= sizeof(client);                                                                                                                       
    ssize_t s=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client,&len); 
    if(s>0)                                                                                                                                              
    {                                                                                                                                                    
  buf[s]=0;                                                                                                                                              
  printf("[%s:%d]: %s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf);                                                                         
      sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&client,sizeof(client));                                                                           
    }                                                                                                                                                    
  }                                                                                                                                                      
                                                                                                                                                         
    return 0;                                                                                                                                            
  }                                  
客户端
#include <stdio.h>                                                                                                                                     
  #include <string.h>                                                                                                                                    
  #include <stdlib.h>                                                                                                                                    
  #include <unistd.h>                                                                                                                                    
  #include <sys/socket.h>                                                                                                                                
  #include <netinet/in.h>                                                                                                                                
  #include <arpa/inet.h>                                                                                                                                 
  typedef struct sockaddr sockaddr;                                                                                                                      
  typedef struct sockaddr_in sockaddr_in;                                                                                                                
int main(int argc,char* argv[]) {                                                                                                                      
    int sock=socket(AF_INET,SOCK_DGRAM,0);                                                                                                               
   if (sock<0) {                                                                                                                                         
     perror("socket");                                                                                                                                   
     return 2;                                                                                                                                           
                                                                                                                                                         
   }                                                                                                                                                     
   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]);                                                                                                            
  char buff[1024];                                                                                                                                       
  struct sockaddr_in peer;                                                                                                                               
  while(1)                                                                                                                                               
  {                                                                                                                                                      
  socklen_t len =sizeof(peer);                                                                                                                           
  printf("please enter: ");                                                                                                                                
  fflush(stdout);                                                                                                                                        
  ssize_t s=read(0,buff,sizeof(buff)-1);                                                                                                                 
  if(s>0)                                                                                                                                                
  {                                                                                                                                                      
    buff[s-1]=0;                                                                                                                                         
    sendto(sock,buff,strlen(buff),0,(struct sockaddr*)&server,sizeof(server));                                                                           
    ssize_t _s=recvfrom(sock,buff,sizeof(buff)-1,0,(struct sockaddr*)&peer,&len);
    if (_s>0) {                                                                                                                                          
      buff[_s]=0;                                                                                                                                        
     printf("server echo %s\n",buff);                                                                                                                    
    }                                                                                                                                                    
                                                                                                                                                         
                                                                                                                                                         
  }                                                                                                                                                      
  }                                                                                                                                                      
                                                                                                                                                         
    return 0;                                                                                                                                            
  }                                     

测试

1.运行服务器
这里写图片描述
2.检查端口

这里写图片描述

3.运行客户端
这里写图片描述

4.查看服务器端
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是一个使用 Python 语言的 UDP 通信的程序的例子。 首先,我们可以使用 Python 内置的 `socket` 库来创建一个 UDP socket: ``` import socket # 创建 socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 获取本地主机名 host = socket.gethostname() # 设置端口号 port = 12345 # 绑定端口 s.bind((host, port)) ``` 然后,我们可以使用 `recvfrom()` 函数来接收数据: ``` while True: # 接收数据 data, addr = s.recvfrom(1024) print("Received message: %s" % data.decode()) ``` 最后,我们可以使用 `sendto()` 函数来发送数据: ``` # 发送数据 message = "Hello, World!" s.sendto(message.encode(), (host, port)) ``` 完整的代码如下: ``` import socket # 创建 socket 对象 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 获取本地主机名 host = socket.gethostname() # 设置端口号 port = 12345 # 绑定端口 s.bind((host, port)) while True: # 接收数据 data, addr = s.recvfrom(1024) print("Received message: %s" % data.decode()) # 发送数据 message = "Hello, World!" s.sendto(message.encode(), (host, port)) ``` 希望这个例子对你有帮助。 ### 回答2: UDP(User Datagram Protocol)是一种无连接的传输协议,它在网络通信中具有较低的延迟和较小的数据包头开销。下面是一个基本的UDP通信的程序示例: 1. 引入必要的库和模块: ```python import socket ``` 2. 创建UDP Socket: ```python udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) ``` 3. 绑定IP地址和端口: ```python local_ip = '127.0.0.1' #本地IP local_port = 8888 #本地端口 udp_socket.bind((local_ip, local_port)) ``` 4. 接收数据: ```python buffer_size = 1024 #接收缓冲区大小 while True: data, addr = udp_socket.recvfrom(buffer_size) #接收数据 print('接收到来自{}的数据:{}'.format(addr, data)) ``` 5. 发送数据: ```python remote_ip = '127.0.0.1' #目标IP remote_port = 9999 #目标端口 message = 'Hello, UDP!' #要发送的消息 udp_socket.sendto(message.encode(), (remote_ip, remote_port)) #发送消息 ``` 在上述代码中,我们创建了一个UDP Socket,并绑定了本地IP地址和端口。然后,程序进入一个循环中,不断接收来自其他主机的数据包,并打印出来。同时,我们也可以使用`sendto()`方法发送数据包给指定的目标IP地址和端口。 需要注意的是,UDP通信是无连接的,发送端发送的数据包可能会丢失,接收端也可能接收到重复的数据包。因此,在实际应用中,我们应该考虑处理丢失、重复和乱序的数据包。 ### 回答3: UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,适用于对数据传输时延要求较低、实时性要求较高的场景。下面给出一个简单UDP通信的程序示例。 服务端程序: ```python import socket # 创建UDP socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定服务器IP和端口号 server_addr = ('127.0.0.1', 8888) server_socket.bind(server_addr) while True: # 接收客户端发送的数据 data, client_addr = server_socket.recvfrom(1024) print(f"Received message from {client_addr}: {data.decode()}") # 将接收到的消息转换为大写 upper_data = data.decode().upper() # 向客户端发送转换后的消息 server_socket.sendto(upper_data.encode(), client_addr) ``` 客户端程序: ```python import socket # 创建UDP socket对象 client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 服务器IP和端口号 server_addr = ('127.0.0.1', 8888) while True: # 从命令行获取用户输入 message = input("请输入消息:") # 发送消息到服务器 client_socket.sendto(message.encode(), server_addr) # 接收来自服务器的响应 response, server_addr = client_socket.recvfrom(1024) print(f"Received response from server: {response.decode()}") if message == "bye": break ``` 以上示例中,服务端创建了一个UDP socket并绑定到指定的IP地址和端口号,然后通过不断循环接收客户端发送的数据,在接收到消息后将其转换为大写,并发送回客户端。客户端程序通过UDP socket将用户输入的消息发送给服务器,并接收服务器的响应消息。当用户输入"bye"时,程序结束。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值