最简单的udp 发送,接受程序

最简单的udp 发送,接受程序, 用以演示udp 发送接受数据的概念.
同时演示了如下的接口调用方式:
1. sendto
2. recvfrom
3. socket
4. bind
5. inet_ntop

6. inet_pton
7. ntohs

/*client.c*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
 
#define MAXLINE 80
#define SERV_PORT 8000
 
int main(int argc, char *argv[])
{
    int sockfd = socket(AF_INET, SOCK_DGRAM, 0 );
 
    struct sockaddr_in servaddr;
    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
    servaddr.sin_port = htons(SERV_PORT);

	printf("press something to send to server and receive message!\n");

	int n; 
    char buf[MAXLINE];
    while (fgets(buf, MAXLINE, stdin) !=NULL){
         n = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr));
         if (n == -1){
             perror("sendto error");
			 exit(1);
         }
         n = recvfrom(sockfd, buf, MAXLINE, 0, NULL, 0);
         if (n == -1){
             perror("recvfrom server");
			 exit(1);
         }
		 printf("recv:%s\n",buf);
    }
    close(sockfd);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#define MAXLINE 80
#define SERV_PORT 8000

/*server.c
 * 将收到的信息转换成大写字母发回
 * */
int main (void) {

	int sockfd = socket(AF_INET, SOCK_DGRAM, 0);

	struct sockaddr_in servaddr;
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	servaddr.sin_port = htons(SERV_PORT);

	//bind 把server 的端口号固定
	bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
	printf("wait message at port %d .....\n",SERV_PORT);

	struct sockaddr_in cliaddr;
	socklen_t cliaddr_len = sizeof(cliaddr);
	int i, n;
	char clientIpStr[INET_ADDRSTRLEN];
	int clientPort;
	char buf[MAXLINE];
	while(1){
		memset(buf,0,sizeof(buf));
		n = recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr *)&cliaddr, &cliaddr_len);
		if (n == -1){
			perror("recvfrom error");
			exit(1);
		}
		inet_ntop(AF_INET, &cliaddr.sin_addr, clientIpStr, sizeof(clientIpStr));
		clientPort = ntohs(cliaddr.sin_port);
		printf("recvfrom %s at PORT %d\n",clientIpStr,clientPort);
		for (i =0; i< n; i++) {
			buf[i] = toupper(buf[i]);
		}
		n = sendto(sockfd, buf, n, 0, (struct sockaddr *)&cliaddr, sizeof(cliaddr));
		if (n == -1){
			perror("sendto error");
			exit(1);
		}
		printf("sendto: %s\n", buf);
	}

}

测试, 在一个终端上执行./server, 另一个终端上执行./client, 随便输入点东西查看结果

$ ./server
wait message at port 8000 .....
recvfrom 127.0.0.1 at PORT 46620
sendto: ABC

recvfrom 127.0.0.1 at PORT 46620
sendto: 123

recvfrom 127.0.0.1 at PORT 46620
sendto: ASDFG

$ ./client
press something to send to server and receive message!
abc
recv:ABC

123
recv:123

asdfg
recv:ASDFG

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MATLAB可以通过使用UDP协议来发送数据或信号给其他设备或计算机。UDP是一种无连接的协议,因此在发送数据之前无需建立连接。UDP发送的流程如下: 1. 创建UDP对象:使用MATLAB中的“udp”函数创建一个UDP对象,指定远程主机的IP地址和端口号。 2. 发送数据:使用“fwrite”函数将要发送的数据写入UDP对象。 3. 关闭UDP对象:使用“fclose”函数关闭UDP对象。 具体实现上,可以采用如下代码: 1. 创建UDP对象: u = udp('192.168.1.100', 1234); fopen(u); 2. 发送数据: fwrite(u, myData); 3. 关闭UDP对象: fclose(u); 其中,“myData”是要发送的数据,可以是数字、向量、矩阵等任意数据类型。 需要注意的是,在实际应用中,发送数据时要确保目标主机已经开启UDP端口,并且知道正确的目标端口号。同时,在发送数据时,要根据接收端的需求自行约定数据的格式和内容,以避免传输错误或数据解析错误。 总之,MATLAB的UDP发送功能可用于许多不同的应用场景,例如无线信号传输、实时数据处理和计算机控制等。 ### 回答2: 在Matlab中,您可以使用UDP协议通过网络发送接收数据。下面是一些步骤,帮助您通过UDP在Matlab中发送数据: 首先,您需要创建一个UDP对象。您可以使用以下命令创建一个UDP对象: udp_object = udp(IP_address,Port_number) 其中,"IP_address"是您要发送数据的计算机的IP地址。"Port_number"是该计算机上用于接收数据的端口号。您可以通过使用 "fopen(udp_object)" 命令打开udp对象,并使用 "fclose(udp_object)" 命令关闭udp对象。 然后,您可以使用 "fwrite(udp_object,data)" 命令向udp对象发送数据。 "data"是您要发送的数据。如果您要发送多个数据块,则需要使用一个循环。 最后,在接收方计算机上,您需要创建一个UDP对象,并从该对象读取数据。您可以使用 "fread(udp_object)" 命令从udp对象读取数据。然后,您可以对接收到的数据进行处理。 总的来说,使用UDP发送数据是一种非常方便和高效的方法。使用Matlab的UDP功能,您可以轻松发送接收数据,并使您的网络应用程序更加便捷和高效。 ### 回答3: MATLAB是一种在科学和工程领域广泛使用的计算机语言和环境。支持用于实时数据传输的UDP(用户数据报协议)协议。 使用MATLAB进行UDP发送需要两个步骤:创建UDP对象和使用该对象发送数据。 首先,创建UDP对象需要指定两个参数:远程主机的IP地址和UDP端口号。例如,以下代码创建了一个名为“ u”的UDP对象,并将其绑定到本地IP地址上的本地端口号1000: u = udp('192.168.1.2', 1000); 接下来,使用MATLAB的fwrite函数向远程主机发送数据。例如,以下代码将一个字符串发送到远程主机: fopen(u); fwrite(u,'Hello World!'); fclose(u); 注意,要在发送数据之前调用fopen函数打开UDP对象,发送数据后再调用fclose函数关闭UDP对象。 除了使用fwrite函数发送简单的字符串,还可以使用MATLAB的packetsize(数据包大小)选项在UDP包中发送更复杂的数据类型,例如矩阵和结构体。 总之,在MATLAB中使用UDP发送数据需要先创建UDP对象并指定远程主机的IP地址和UDP端口号,然后使用fwrite函数发送数据。可以使用MATLAB的packetsize选项发送更复杂的数据类型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值