`

linux c udp

阅读更多

linux 下可用 c 进行 udp 通信,使用 server / client,

 

例子:

 

* server

/**
 * udp server
 * @date: 2011-4-1 下午03:34:27
 * @author: eric
 */
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>

static int SERVER_PORT = 10002;
static int MAX_REQUEST_QUEUE = 5;
static int MAX_DATA_SIZE = 100;
/**
 * start udp server
 */
int udpserver() {
	int sockfd, newfd;
	struct sockaddr_in server_addr, client_addr;
	char buf[MAX_DATA_SIZE + 1];

	// create socket
	sockfd = socket(AF_INET, SOCK_DGRAM, 0);

	// set server address
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(SERVER_PORT);
	server_addr.sin_addr.s_addr = INADDR_ANY;

	// bind
	if (bind(sockfd, (struct sockaddr *) &server_addr, sizeof(struct sockaddr)) == -1) {
		perror("bind error\n");
		return 1;
	}

	int recv_size;
	int sin_size = sizeof(struct sockaddr_in);
	while (1) {
		// recvfrom
		if ((recv_size = recvfrom(sockfd, buf, MAX_DATA_SIZE, 0, (struct sockaddr *) &client_addr, &sin_size)) == -1) {
			perror("recvfrom error\n");
			continue;
		}
		if (recv_size) {
			buf[recv_size] = '\0';
			printf("receive:\t %s ,from %s:%d\n", buf, inet_ntoa(client_addr.sin_addr), client_addr.sin_port);
		}

		char *s_send = "hi client!";
		// sendto
		if (sendto(sockfd, s_send, strlen(s_send), 0, (struct sockaddr *) &client_addr, sin_size) == -1) {
			perror("sendto error\n");
			continue;
		} else {
			printf("send:\t%s\n", s_send);
		}

		printf("\n");
	}
	return 0;
}
int main() {
	return udpserver();
}

 


* client

/**
 * udp client
 * @date: 2011-4-1 下午03:39:12
 * @author: eric
 */
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>

static char *SERVER_HOST = "127.0.0.1";
static int SERVER_PORT = 10002;
static int MAX_DATA_SIZE = 100;
/**
 * start udp client
 */
int udpclient() {
	int sockfd;
	struct sockaddr_in server_addr;
	char buf[MAX_DATA_SIZE + 1];

	// create socket
	sockfd = socket(AF_INET, SOCK_DGRAM, 0);

	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(SERVER_PORT);
	server_addr.sin_addr.s_addr = inet_addr(SERVER_HOST);

	// connect
	if ((connect(sockfd, (struct sockaddr *) &server_addr, sizeof(struct sockaddr))) == -1) {
		perror("connect error\n");
		return 1;
	} else {
		printf("connected to server %s:%d\n", inet_ntoa(server_addr.sin_addr), ntohs(server_addr.sin_port));
	}

	char *s_send = "hi server!";
	// send data
	if ((write(sockfd, s_send, strlen(s_send))) == -1) {
		perror("write error\n");
		return 1;
	} else {
		printf("send:\t%s\n", s_send);
	}

	int recv_size;
	// receive data
	if ((recv_size = read(sockfd, buf, MAX_DATA_SIZE)) == -1) {
		perror("read error\n");
		return 1;
	}
	if (recv_size) {
		buf[recv_size] = '\0';
		printf("receive:\t%s\n", buf);
	}

	// close socket
	close(sockfd);
	return 0;
}

int main() {
	return udpclient();
}

分享到:
评论

相关推荐

    udp.rar_linux c语言 udp_udp 多线程_udp c语言 linux_udp linux

    在这个"udp.rar"压缩包里,包含的是使用C语言在Linux环境下编写的UDP客户端(udpcli.c)和服务器(udpser.c)程序,以及一个可能包含项目资源或说明的文本文件(www.pudn.com.txt)。 1. UDP协议基础:UDP是一种...

    聊天室 linux c udp

    【标题】:“聊天室 Linux C UDP”项目介绍 在IT领域,网络编程是不可或缺的一部分,尤其是在构建实时通信系统时。本项目聚焦于使用C语言在Linux操作系统上开发一个基于UDP协议的聊天室应用。UDP(User Datagram ...

    Linux下的udp广播程序

    在Linux操作系统中,UDP(User Datagram Protocol)是一种无连接的传输层协议,它不提供连接建立、流量控制或错误校正等服务,而是注重高效的数据传输。UDP广播是UDP协议的一种特殊形式,允许一个发送者将数据包发送...

    udp.rar_linux UDP_linux c udp_linux udp arm_udp linux

    Linux UDP编程是网络通信中的重要一环,尤其在嵌入式ARM开发板上,它扮演着不可或缺的角色。UDP,即用户数据报协议(User Datagram Protocol),是一种无连接的、不可靠的传输层协议,与TCP相比,它具有更低的开销和...

    UDP.rar_C语言udp组播_linux UDP_udp linux _udp组播c语言

    本文将深入探讨标题“UDP.rar_C语言udp组播_linux UDP_udp linux _udp组播c语言”所涉及的知识点,主要集中在C语言实现UDP组播在Linux环境下的操作。 首先,让我们理解UDP(User Datagram Protocol)是什么。UDP是...

    linux的udp通信客户端是服务器端的 c语言程序

    根据提供的文件信息,我们可以深入分析该UDP通信案例中的客户端与服务器端C语言程序代码,并从中提炼出相关的知识点。 ### UDP通信概述 用户数据报协议(User Datagram Protocol, UDP)是一种无连接的传输层协议,...

    Linux UDP socket 设置为的非阻塞模式与阻塞模式区别

    ### Linux UDP Socket 非阻塞模式与阻塞模式的区别详解 #### 一、引言 在进行网络编程时,我们经常会遇到阻塞模式与非阻塞模式的选择问题。这两种模式直接影响程序的运行效率和资源利用率。本文将详细介绍在Linux...

    Linux下UDP通信

    本教程将深入探讨如何使用C语言在Linux环境下进行UDP通信,并通过实现简单的文件下载与上传来加深理解。 首先,我们需要了解Linux中的Socket编程接口。Socket是进程间通信的一种方式,它提供了进程在网络上的通信...

    Linux下基于UDP的socket编程,适用多客户端之间,服务器与客户端之间的通信。客户端和服务端

    Linux下基于UDP的socket编程,适用多客户端之间,服务器与客户端之间的通信。客户端和服务端代码分开了。notepad++可打开

    linuxnet.rar_Linux 网卡 数据流_linux cudp编程_linux 测速_linuxnet_网络测速

    linux下的网卡测速程序,使用udp编写,同时也是一个很好的linux网络编程范例,cudp为客户端程序,而sudp为服务器程序

    UDP.rar_UDP_linux UDP_linux UDP makefile_udp linux

    在标签"udp linux_udp linux_udp__makefile udp_linux__"中,`linux_udp`和`udp_linux`暗示了这是与Linux系统相关的UDP编程,而`makefile_udp`提示我们项目中包含了一个`Makefile`,这是用于自动化编译和链接C或C++...

    s3c2410-linux-udp源码

    【标题】"s3c2410-linux-udp源码"涉及的知识点主要集中在嵌入式系统、Linux内核编程以及网络通信协议UDP(User Datagram Protocol)的应用上。S3C2410是一款由Samsung公司生产的基于ARM920T内核的微处理器,常用于...

    UDP.RAR_linux moxa_linux udp.rar_moxa_moxa linux_udp linux

    这通常涉及到编写C或C++程序,利用Linux的socket API来实现UDP数据包的发送和接收。 在标签列表中,"moxa"和"moxa_linux"指出我们将关注的是MOXA设备在Linux环境下的工作,而"linux_udp.rar"可能是指包含示例代码或...

    linux下udp编程

    在Linux系统中,UDP(User Datagram Protocol)是一种无连接的传输层协议,常用于需要快速传输数据且对数据完整性要求不高的场景。本教程将深入探讨如何在Linux环境下进行UDP编程,包括客户端和服务器端的实现。 ...

    linux下UDP,server/client模型

    在提供的`udpserver.c`和`udpclient.c`源代码文件中,我们可以看到具体实现这些功能的C语言代码。通常,代码会包含错误检查、数据编码解码、输入输出的处理等细节。通过编译这两个文件(使用`gcc`或`clang`等编译器...

    udp-chat.rar_linux c udp 聊天_udp聊天_终端

    在linux系统下开发的,简易聊天工具,开启两个终端,进行聊天

    linux下的udp源代码

    压缩包中的`linux_udp`可能包含`server.c`和`client.c`两个文件,分别代表服务器和客户端的源代码。通过对这两个文件的学习,你可以看到如何在Linux环境下使用C语言实现UDP通信。 以上就是基于Linux的UDP网络编程...

    基于UDP协议的Client/Server linux网络编程

    本主题将探讨如何在Linux环境下,利用C语言实现基于UDP协议的Client/Server通信,特别是文件传输,并支持多客户端向服务器请求数据以及服务器重启后的断点续传功能。 【描述】: 在UDP通信中,客户端(Client)...

    linuxc高并发服务器

    LinuxC高并发服务器是利用操作系统提供的epoll机制,在C语言环境下构建的一种能处理大量并发连接的服务器。Epoll是Linux内核提供的一种I/O多路复用技术,它极大地提升了在高并发场景下的系统性能。下面我们将深入...

Global site tag (gtag.js) - Google Analytics