客户端:
#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);
}
分享到:
相关推荐
本教程将深入探讨如何使用C语言在Linux环境下进行UDP通信,并通过实现简单的文件下载与上传来加深理解。 首先,我们需要了解Linux中的Socket编程接口。Socket是进程间通信的一种方式,它提供了进程在网络上的通信...
在Linux中,使用C语言编写UDP通信程序时,首先需要包含必要的头文件,如`#include <sys/socket.h>`,`#include <netinet/in.h>`和`#include <arpa/inet.h>`。这些头文件包含了定义SOCKET句柄、地址结构和网络函数的...
除了同一操作系统下的udp通信外,还能进行windows下与linux下的客户端与服务端通信。出现中文乱码的话,那一定是运行此程序的窗口的编码格式不一致,只要改为一致就可以了。如果要将dos窗口的编码方式改为UTF8,可...
linux系统下建立多线程程序设计,完成UDP网络通信的发送与接收,包括总结与源代码,实测效果可见链接https://blog.csdn.net/zxp121127/article/details/78506081
在Linux下编写UDP通信程序,主要涉及以下步骤: 1. **创建套接字**:使用`socket()`函数创建一个套接字描述符,指定为SOCK_DGRAM类型,表示UDP协议。 2. **绑定地址**:服务器端使用`bind()`函数将套接字与特定的...
linux qt基于udp通信的小程序的发送端
在Linux环境中,Qt是一个强大的C++图形用户界面应用程序开发框架,它支持多种操作系统,包括Linux、...通过阅读和理解这些代码,你可以深入学习如何在Linux环境中使用Qt进行UDP通信,特别是作为接收端的实现细节。
在“压缩包子文件的文件名称列表”中只有一个文件名"UDP",这可能是包含源代码、配置文件或者日志的目录或文件,用于展示MOXA设备如何在Linux中实现UDP通信。通常,这样的文件会包含头文件、源代码、Makefile等,...
总结来说,`epoll`和`socket`的结合使用使得在Linux环境中高效处理UDP通信成为可能。通过`epoll`的事件驱动模型,我们可以优雅地处理大量并发的UDP连接,提高服务器的响应速度和吞吐量。对于需要快速、低延迟且对...
在压缩包中的"UDP"文件可能包含了示例代码,这些代码展示了如何在Linux环境中实现UDP通信。初学者可以通过阅读和运行这些代码,了解并掌握上述知识点。同时,结合相关的网络编程书籍和在线资源,可以更深入地理解UDP...
根据提供的文件信息,我们可以深入分析该UDP通信案例中的客户端与服务器端C语言程序代码,并从中提炼出相关的知识点。 ### UDP通信概述 用户数据报协议(User Datagram Protocol, UDP)是一种无连接的传输层协议,...
1.首先是UDP_server.c里面,用socket()建立一个套接字,然后用bind()把地址端口绑定到这个套接字上面,接着...还有一点值得高兴,这些源码用arm-linux-gcc编译了一遍,放在到arm板子上运行正常,和电脑没有一点区别。
linux下双网卡udp收发通信,两个网口收到udp数据包后直接往源地址回复相同的数据,通过两个线程实现双网口并行工作,两个网卡工作在不同的网段
综上,这个“聊天室 Linux C UDP”项目是一个实践性的教学案例,旨在教授网络编程的基本概念,特别是如何利用UDP协议在Linux环境中构建一个实时聊天应用。通过对源代码的学习和实际操作,开发者可以深入理解网络编程...
总之,这个压缩包提供了一个在Linux环境中用C语言实现的UDP通信示例,包含客户端和服务器程序,且可能涉及多线程处理。这样的实践可以帮助开发者深入理解网络编程原理,特别是UDP协议和Linux环境下的C语言编程。
总之,这个“C++ UDP通讯类(兼容window和linux)”提供了一种简洁的方式来处理跨平台的UDP通信,减少了开发者在不同操作系统之间移植代码的工作量,提高了开发效率。其详细的注释和测试可用性也体现了作者对代码可...
UDP通信,适合初学者和第一次接触UDP的小白。在linux环境下,有1个服务端和1个客户端,异步通信,代码有注释,已经调试通过(IP地址需要更改,可以改成回环地址或者你本地的IP)。在编译运行时,先运行服务端代码,...
通过分析上述文件“UDP”,我们可以推测它包含的是一个简单的Linux环境下UDP通信的代码示例,可能包括服务器和客户端的实现,可以作为学习和参考的基础。理解并掌握这些知识点,有助于编写和调试UDP通信程序。
在这个项目中,我们将讨论如何在运行Linux操作系统的S3C2410平台上实现UDP通信。 首先,我们需要理解Linux内核中的网络子系统。Linux内核负责处理所有网络相关的功能,包括协议栈的实现。对于UDP,它是一种无连接的...