`
jiq408694711
  • 浏览: 36606 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

Linux中的UDP通信

 
阅读更多

客户端:

#include "apue.h"
#include <netdb.h>
#include <sys/socket.h>
/*
问题: UDP通信套接字描述符没有同任何地址绑定,那么在这个套接字描述符上面发送数据有什么意义 ???
是不是系统默认将其与本机地址绑定了?
答案:假如c_fd没有显式和任何本地"端口"绑定,那么内核会为其绑定一个临时"端口",
以便其可以通过该"端口"将数据发送到目的地址 !!!
>>>同Unix域套接字通信不同,这里不用显示绑定套接字和地址,服务器也能找到客户端 ~
*/
int main(void){
	int c_fd; 
	struct sockaddr_in s_addr;
	char buf[MAXLINE];
	char msg[MAXLINE];

	/* 建立UPD套接口,SOCK_DGRAM指明为UDP通信套接字 */
	if((c_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
		printf("socket error\n");

	/* 初始化服务器地址 */	
	s_addr.sin_family = AF_INET; 
	inet_pton(AF_INET,"127.0.0.1",(void *)&s_addr.sin_addr.s_addr);
	s_addr.sin_port = htons(3636); 

	/* 向服务器发送数据 */
	fgets(msg,MAXLINE,stdin);
	if(sendto(c_fd,msg,strlen(msg),0,(struct sockaddr *)&s_addr,sizeof(s_addr)) < 0)
		printf("send error\n");

	/* 接收服务器的数据,不需要关心是谁发来的 */
	if(recvfrom(c_fd,buf,MAXLINE,0,NULL,NULL) < 0)
			printf("recvfrom error\n");
	printf("server send: %s\n",buf);

	/* 关闭套接字 */
	close(c_fd);
	exit(0);
}

服务器端:

#include "apue.h"
#include <netdb.h>
#include <sys/socket.h>
#include "jiq/daemon.c"

#define BUFLINE 128
#define MAXADDRLEN 256
int main(void){
	int s_fd;
	int len;
	char buf[BUFLINE];
	struct sockaddr_in s_addr; //Linux network-addr
	struct sockaddr c_addr;
	char *msg="I Have Got your meg\n";

	/* 
		let this server become daemon 
		(1)系统自举时启动
		(2)没有控制终端
		(3)系统关闭时终止
		(4)后台运行
	*/
	daemonize("server");
	
	/* 建立UDP套接字,SOCK_DGRAM指明为UDP通信套接字 */	
	if((s_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
		printf("socket error\n");

	/* 绑定套接字和服务器网络地址 */
	s_addr.sin_family = AF_INET; 
	s_addr.sin_addr.s_addr = htonl(INADDR_ANY);//内核指定地址
	s_addr.sin_port = htons(3636); 
	if(bind(s_fd,(struct sockaddr *)&s_addr,sizeof(s_addr)) < 0)
		printf("bind error\n"); 

	for(;;){
		printf("\nwaiting for ask...\n");
		/* 接收数据,并记下是谁发来的 */
		if(recvfrom(s_fd,buf,BUFLINE,0,&c_addr,&len) < 0)
			printf("recvfrom error\n");

		/* 向客户端发送数据 */
		if(sendto(s_fd,msg,strlen(msg),0,&c_addr,len) < 0)
			printf("sendto error\n");

		printf("client send: %s",buf);
		memset(buf,0,MAXLINE); //clear buf
	}

 	/* 关闭套接字 */
	close(s_fd);
	exit(0);
}
分享到:
评论

相关推荐

    Linux下UDP通信

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

    基于LINUX的UDP通信

    在Linux中,使用C语言编写UDP通信程序时,首先需要包含必要的头文件,如`#include &lt;sys/socket.h&gt;`,`#include &lt;netinet/in.h&gt;`和`#include &lt;arpa/inet.h&gt;`。这些头文件包含了定义SOCKET句柄、地址结构和网络函数的...

    udp通信,windows和linux版本

    除了同一操作系统下的udp通信外,还能进行windows下与linux下的客户端与服务端通信。出现中文乱码的话,那一定是运行此程序的窗口的编码格式不一致,只要改为一致就可以了。如果要将dos窗口的编码方式改为UTF8,可...

    linux多线程+UDP网络通信(总结+程序)

    linux系统下建立多线程程序设计,完成UDP网络通信的发送与接收,包括总结与源代码,实测效果可见链接https://blog.csdn.net/zxp121127/article/details/78506081

    Linux下的udp通信

    在Linux下编写UDP通信程序,主要涉及以下步骤: 1. **创建套接字**:使用`socket()`函数创建一个套接字描述符,指定为SOCK_DGRAM类型,表示UDP协议。 2. **绑定地址**:服务器端使用`bind()`函数将套接字与特定的...

    linux qt基于udp通信的小程序

    linux qt基于udp通信的小程序的发送端

    linux qt基于udp通信的小程序 接收端

    在Linux环境中,Qt是一个强大的C++图形用户界面应用程序开发框架,它支持多种操作系统,包括Linux、...通过阅读和理解这些代码,你可以深入学习如何在Linux环境中使用Qt进行UDP通信,特别是作为接收端的实现细节。

    UDP.RAR_linux moxa_linux udp.rar_moxa_moxa linux_udp linux

    在“压缩包子文件的文件名称列表”中只有一个文件名"UDP",这可能是包含源代码、配置文件或者日志的目录或文件,用于展示MOXA设备如何在Linux中实现UDP通信。通常,这样的文件会包含头文件、源代码、Makefile等,...

    linux epoll socket UDP通信的实现! 看清楚不是tcp哟.zip

    总结来说,`epoll`和`socket`的结合使用使得在Linux环境中高效处理UDP通信成为可能。通过`epoll`的事件驱动模型,我们可以优雅地处理大量并发的UDP连接,提高服务器的响应速度和吞吐量。对于需要快速、低延迟且对...

    linux UDP 网络通信程序

    在压缩包中的"UDP"文件可能包含了示例代码,这些代码展示了如何在Linux环境中实现UDP通信。初学者可以通过阅读和运行这些代码,了解并掌握上述知识点。同时,结合相关的网络编程书籍和在线资源,可以更深入地理解UDP...

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

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

    linux下一个UDP通信例子

    1.首先是UDP_server.c里面,用socket()建立一个套接字,然后用bind()把地址端口绑定到这个套接字上面,接着...还有一点值得高兴,这些源码用arm-linux-gcc编译了一遍,放在到arm板子上运行正常,和电脑没有一点区别。

    linux下双网卡UDP功能代码实现

    linux下双网卡udp收发通信,两个网口收到udp数据包后直接往源地址回复相同的数据,通过两个线程实现双网口并行工作,两个网卡工作在不同的网段

    聊天室 linux c udp

    综上,这个“聊天室 Linux C UDP”项目是一个实践性的教学案例,旨在教授网络编程的基本概念,特别是如何利用UDP协议在Linux环境中构建一个实时聊天应用。通过对源代码的学习和实际操作,开发者可以深入理解网络编程...

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

    总之,这个压缩包提供了一个在Linux环境中用C语言实现的UDP通信示例,包含客户端和服务器程序,且可能涉及多线程处理。这样的实践可以帮助开发者深入理解网络编程原理,特别是UDP协议和Linux环境下的C语言编程。

    C++UDP通讯类(兼容window和linux)

    总之,这个“C++ UDP通讯类(兼容window和linux)”提供了一种简洁的方式来处理跨平台的UDP通信,减少了开发者在不同操作系统之间移植代码的工作量,提高了开发效率。其详细的注释和测试可用性也体现了作者对代码可...

    C++写的UDP通信协议,linux环境,代码有注释,编译无错误,已经调试通过(有1个服务端和1个客户端)

    UDP通信,适合初学者和第一次接触UDP的小白。在linux环境下,有1个服务端和1个客户端,异步通信,代码有注释,已经调试通过(IP地址需要更改,可以改成回环地址或者你本地的IP)。在编译运行时,先运行服务端代码,...

    linux下UDP通讯代码

    通过分析上述文件“UDP”,我们可以推测它包含的是一个简单的Linux环境下UDP通信的代码示例,可能包括服务器和客户端的实现,可以作为学习和参考的基础。理解并掌握这些知识点,有助于编写和调试UDP通信程序。

    s3c2410-linux-udp源码

    在这个项目中,我们将讨论如何在运行Linux操作系统的S3C2410平台上实现UDP通信。 首先,我们需要理解Linux内核中的网络子系统。Linux内核负责处理所有网络相关的功能,包括协议栈的实现。对于UDP,它是一种无连接的...

Global site tag (gtag.js) - Google Analytics