首页 > 其他分享 >udp之服务器和客户端

udp之服务器和客户端

时间:2023-09-25 16:22:37浏览次数:48  
标签:sockaddr udp socket struct 服务器 include buf 客户端

客户端代码

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



static int udp_socket=-1;
struct sockaddr_in serveraddr;



void udp_init()
{
	printf("udp init\n");
}


void udp_write()
{
	 //第三步:发送数据
    char buf[12] = "789";	
	socklen_t addrlen = sizeof(serveraddr);
	if(sendto(udp_socket,buf,3,0,(struct sockaddr *)&serveraddr,addrlen) == -1)
    {
        perror("fail to sendto");
        return;
    }

}

int udp_test()
{
	//第一步,创建一个用于UDP通信的套接字
	udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
	if(udp_socket<0)
	{		
		perror("open error ");
		return -1;
	}
	printf("udp_socket=%d\n",udp_socket);
	
	//第二步,绑定服务器的IP和端口	
	/*
	struct in_addr
	{
		in_addr_t s_addr;//IP 地址4字节
	};
	struct sockaddr_in
	{
		sa_family_t sin_family;//协议族 2字节
		in_port_t sin_port;//端口号 2字节
		struct in_addr sin_addr;// IP地址 4字节
		char sin_zero[8]// 填充,不起什么作用 8字节
	};
	struct sockaddr
	{
		sa_family_t sa_family; //2字节
		char sa_data[14] //14字节
	}
	*/
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_addr.s_addr = inet_addr("192.168.2.171");
	serveraddr.sin_port = htons(atoi("7788"));
	
	return 0;
}

服务器端代码

#include"udp.h"
#include<stdio.h>
#include<stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/udp.h>
#include <errno.h>
#include <arpa/inet.h>



static int udp_socket=-1;

void udp_init()
{
	printf("udp init\n");
}


void udp_read()
{
	 //第三步:接收数据
    char buf[128] = "";
    struct sockaddr_in clientaddr;
    socklen_t addrlen = sizeof(struct sockaddr_in);
	
	if(recvfrom(udp_socket,buf,28,0,(struct sockaddr *)&clientaddr,&addrlen) == -1)
	{
	   perror("fail to recvfrom");
	   return ;
	}
	   //打印数据
	   //打印客户端的ip地址和端口号
	   printf("ip:%s,port:%d\n",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port));
	   //打印接收到的数据
	   printf("from client: %s\n",buf);

}

int udp_test()
{
	//第一步,创建一个用于UDP通信的套接字
	udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
	if(udp_socket<0)
	{		
		perror("open error ");
		return -1;
	}
	printf("udp_socket=%d\n",udp_socket);
	
	//第二步,绑定服务器的IP和端口	
	/*
	struct in_addr
	{
		in_addr_t s_addr;//IP 地址4字节
	};
	struct sockaddr_in
	{
		sa_family_t sin_family;//协议族 2字节
		in_port_t sin_port;//端口号 2字节
		struct in_addr sin_addr;// IP地址 4字节
		char sin_zero[8]// 填充,不起什么作用 8字节
	};
	struct sockaddr
	{
		sa_family_t sa_family; //2字节
		char sa_data[14] //14字节
	}
	*/
	
	struct sockaddr_in serveraddr;
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_addr.s_addr = inet_addr("192.168.2.70");
	serveraddr.sin_port = htons(atoi("7788"));
	if(bind(udp_socket,(struct sockaddr*)&serveraddr,sizeof(serveraddr)) == -1)
	{
	   perror("fail to bind");
	   return -1;
	}
	return 0;
}

标签:sockaddr,udp,socket,struct,服务器,include,buf,客户端
From: https://www.cnblogs.com/njit-sam/p/17728177.html

相关文章

  • websocket js 客户端自动重新连接
    varwsUrl='ws://'+(document.domain||'127.0.0.1')+':8282';varws=null;//WebSocket对象varheartbeatTimer=null;//心跳定时器varisReconnect=true;//是否自动重连//创建WebSocket连接//@authhttps://so.csdn.net/so/aifu......
  • 服务器主机:复杂理论的视角与SEO策略
    本文分享自天翼云开发者社区《服务器主机:复杂理论的视角与SEO策略》,作者:不知不觉在数字世界的演变中,服务器主机在信息存储和数据处理方面发挥着核心作用。本文将带你重新认识服务器主机的价值,并通过复杂理论解释其重要性和必要性,同时结合SEO关键字布局来指导你如何优化内容。......
  • vmware剪贴板共享不起作用的解决方法-银河麒麟V10服务器版
    安装了虚拟机自带的vmwaretools,还是不行试试这样:yuminstallopen-vm-toolsyuminstallopen-vm-tools-desktop或者:sudoapt-getautoremoveopen-vm-toolssudoapt-getinstallopen-vm-toolssudoapt-getinstallopen-vm-tools-desktop 结束后务必重启下......
  • Redis 客户端连接
     Redis命令用于在redis服务上执行操作。要在redis服务上执行命令需要一个redis客户端。Redis客户端在Redis包中有提供,这个包在我们前面的安装教程中就有安装过了。Redis通过监听一个TCP端口或者Unixsocket的方式来接收来自客户端的连接,当一个连接建立......
  • pfSense防火墙客户端访问光猫的配置
    光猫采用桥接模式,通过pfSense防火墙PPPoE拨号上网,客户端将无法访问光猫配置界面。这是因为拨号后,防火墙会将所有出站流量发送到上游ISP,ISP不会将专用子网路由传回光猫,导致无法访问光猫。本文介绍在不增加任何设备的情况下访问光猫的配置方法。解决思路:因为PPPoE拨号分配的是虚拟PP......
  • 如何在本地搭建微信小程序服务器
    现在开发需要购买服务器,价格还是有点贵的,可以花费小代价就可以搭建一个服务器,可以用来开发小程序,博客等。1.域名(备案过的)2.阿里云注册免费的https证书3.配置本地的nginx4.内网映射(本地安装wampserver服务器)一、域名注册花生壳,开通内网映射需要6元里面可以注册2个免费的域......
  • Qt/C++音视频开发56-udp推流和拉流/组播和单播推流
    一、前言之前已经实现了rtsp/rtmp推流,rtsp/rtmp/hls/flv/ws-flv/webrtc等拉流,这种一般都需要依赖一个独立的流媒体服务程序,有没有一种更便捷的方式不需要这种依赖,然后又能实现推拉流呢,当然有的那就是udpp推流,其中udp推流还可以是组播或者单播推流,组播一般会选择224.0.0.1这个地址......
  • 使用openssl生成根证书和服务器证书
    1、生成服务器私钥opensslgenrsa-outserver.key20482、根据服务器私钥文件生成证书请求文件,这个文件中会包含申请人的一些信息,所以执行下面这行命令过程中需要用户在命令行输入一些用户信息,随便填写,一路回车即可opensslreq-new-keyserver.key-outserver.csrYoua......
  • 谁动了我的服务器
    1、前言   我们在实际工作当中,都碰到过误操作、误删除、误修改过配置文件等等事件。对于没有堡垒机的公司来说,要在linux系统上深究到底谁做过配置文件的修改、做过误删除是很头疼的事情,特别是遇到删库跑路的事件,更头大了。当然你可以通过history来查看历史命令记录,如果把......
  • 服务器Docker搭建CUDA10.2+PaddleDetection2.4.2-GPU环境
    1、容器建立由于目标服务器的显卡版本较老,CUDA只支持到10.2,所以需要选用老版本Docker镜像,百度网盘链接:https://pan.baidu.com/s/1GiQzWRypaeBNFWETWFAV-Q?pwd=5f12 使用命令将镜像启动为容器:dockerrun--namenvidia-cuda10.2-cudnn7-1-p9001:22-p9002:8002-v/work/nod......