UNIX网络编程——UDP协议,CS架构

目录

一.socket创建通信的套接字

二.IPv4地址结构

三.通用地址结构

四. 两种地址结构的使用场合

五.sendto发送数据 

六.bind固定地址信息​编辑

七.recvfrom接受UDP的消息​编辑



一.socket创建通信的套接字

二.IPv4地址结构

三.通用地址结构

四. 两种地址结构的使用场合

 
五.sendto发送数据 

六.bind固定地址信息

 

代码实例:

#include <cstdio>
#include<iostream>
#include<string.h>     //memset
#include<arpa/inet.h>  //htos
#include<sys/socket.h>  //socket
#include<netinet/in.h> //struct sockaddr
#include<unistd.h>  //close

void pra() {

	int sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock != -1) {

        //绑定本地IP和端口
		struct sockaddr_in my_addr;
		memset(&my_addr , 0, sizeof my_addr);
		my_addr.sin_family = AF_INET;
		my_addr.sin_port = htons(9000);
		my_addr.sin_addr.s_addr = INADDR_ANY;  //绑定本地所有ip
		bind(sock, (struct sockaddr*)&my_addr, sizeof my_addr);
		
		
        //设置目的地址结构
		char* serv_ip = "196.168.233.13";  //声明serve IP地址
		struct sockaddr_in ser_addr;  
		//定义IPv4地址结构,存放服务器的地址信息(目的主机)
		memset(&ser_addr, 0, sizeof ser_addr); 
		//结构体变量addr所有成员初始化为0
		ser_addr.sin_family = AF_INET; //指定地址族
		//32位Ipv4地址omojokppi
		//inet_addr();
		inet_pton(AF_INET, serv_ip, &ser_addr.sin_addr.s_addr);
		ser_addr.sin_port = htons(6000);  //服务器端口


        //发送消息
		sendto(sock, "hello world", strlen("hello world"), 0, (struct sockaddr*)&ser_addr, sizeof ser_addr);
		
		close(sock);  //关闭套接字

	}
	
}


int main() {

	pra();
	return 0;
}

 ​​​

七.recvfrom接受UDP的消息


 代码实例:

#include <cstdio>
#include<iostream>
#include<string.h>     //memset
#include<arpa/inet.h>  //htos
#include<sys/socket.h>  //socket
#include<netinet/in.h> //struct sockaddr
#include<unistd.h>  //close

void pra() {

	int sock = socket(AF_INET, SOCK_STREAM, 0);
	if (sock != -1) {

		struct sockaddr_in my_addr;
		memset(&my_addr , 0, sizeof my_addr);
		my_addr.sin_family = AF_INET;
		my_addr.sin_port = htons(9000);
		my_addr.sin_addr.s_addr = INADDR_ANY;  //绑定本地所有ip
		bind(sock, (struct sockaddr*)&my_addr, sizeof my_addr);
		//绑定本地IP和端口
		
		//接收信息
		while (1) {
			//定义一个IPv4地址结构存放发送者的信息
			struct sockaddr_in from_addr;
			
			socklen_t from_len = sizeof from_addr;
			unsigned char buf[1500] = "";
			int len = recvfrom(sock, buf, sizeof buf, 0, (struct sockaddr*)&from_addr, &from_len);
			
			char ip[16] = "";
			inet_ntop(AF_INET, &from_addr.sin_addr.s_addr, ip, sizeof 16);
			printf("消息来自  %s  %hu ---->", ip, ntohs(from_addr.sin_port));
			printf("lem:%d msg:%s\n", len, buf);
		}
		
		close(sock);  //关闭套接字

	} 
	
}


int main() {

	pra();
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值