//udp.h
#ifndef _UDP_H
#define _UDP_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
typedef struct SockData
{
struct sockaddr_in sockaddrIn;
int sockFd;
int sockaddrLen;
}SData;
void SetServerSockaddr(int port,struct SockData *sd);//初始化服务器端
void SetClientSockaddr(char ip[],int port,struct SockData *cd);//初始化客户端
int RecvMsg(struct SockData *sd,char msg[]);//接受消息 返回接受字节长度
int SendMsg(struct SockData *cd,char msg[]);//发送消息返回发送字节长度
#endif
//udp.c
#include "udp.h"
void SetServerSockaddr(int port,struct SockData *sd)
{
int len;
int sockfd;
struct sockaddr_in ser;
bzero(&ser, sizeof(ser));
ser.sin_family = AF_INET;
ser.sin_addr.s_addr =htonl(INADDR_ANY);
ser.sin_port = htons(port);
len = sizeof(ser);
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd == -1)
{
perror("error!n");
exit(-1);
}
bind(sockfd, (struct sockaddr *)&ser, sizeof(ser));
sd->sockaddrIn=ser;
sd->sockFd=sockfd;
sd->sockaddrLen=len;
}
void SetClientSockaddr(char ip[],int port,struct SockData *cd)
{
struct sockaddr_in cl;
int sockfd;
int len;
sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(sockfd == -1)
{
perror("error!n");
exit(-1);
}
int broadcast = 1;
int num = 0;
int ret_val = setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&broadcast,sizeof(broadcast));
if(ret_val == -1)
{
perror("Failed in setsockfd n");
exit(-1);
}
cl.sin_family = AF_INET;
cl.sin_port = htons(port);
cl.sin_addr.s_addr = inet_addr(ip);
len=sizeof(struct sockaddr_in);
cd->sockaddrIn=cl;
cd->sockFd=sockfd;
cd->sockaddrLen=len;
}
int RecvMsg(struct SockData *sd,char msg[])
{
int len;
len=recvfrom(sd->sockFd,msg,1024,0,(struct sockaddr *)&(sd->sockaddrIn),&(sd->sockaddrLen));
msg[len]='n';
return len;
}
int SendMsg(struct SockData *cd,char msg[])
{
int len;
len= sendto(cd->sockFd,msg,strlen(msg),0,(struct sockaddr *)&(cd->sockaddrIn),cd->sockaddrLen);
return len;
}
//client.c
#include "udp.h"
#include <stdio.h>
#include <string.h>
int main()
{
int len;
char recv_msg[256];
char send_msg[256]="send come server !";
SData cd;
//SetServerSockaddr(8899,&cd);
//SData cd;
SetClientSockaddr("127.0.0.1",8899,&cd);
int count=0;
while(1)
{
count++;
SendMsg(&cd,send_msg);
printf("send message : %sn", send_msg);//inet_ntoa(cl.sin_addr);
bzero(&recv_msg,sizeof(recv_msg));
RecvMsg(&cd,recv_msg);
printf("recv message : %d%sn",count, recv_msg);//inet_ntoa(cl.sin_addr);
}
return 0;
}
//server.c
#include "udp.h"
#include <stdio.h>
#include <string.h>
int main()
{
int len;
char recv_msg[256];
char send_msg[256]="send come server !";
SData cd;
SetServerSockaddr(8899,&cd);
//SData cd;
//SetClientSockaddr("127.0.0.1",8899,&cd);
int count=0;
while(1)
{
count++;
bzero(&recv_msg,sizeof(recv_msg));
RecvMsg(&cd,recv_msg);
printf("recv message : %d%sn",count, recv_msg);//inet_ntoa(cl.sin_addr);
SendMsg(&cd,send_msg);
printf("send message : %sn", send_msg);//inet_ntoa(cl.sin_addr);
}
return 0;
}
分享到:
相关推荐
在这个“C语言UDP传输系统源码”中,我们可以深入理解UDP协议的工作原理以及如何用C语言实现一个简单的UDP通信系统。下面将详细探讨相关知识点: 1. UDP协议基础: - UDP是一种无连接的协议,发送数据前无需建立...
在IT行业中,网络通信是至关重要的一个领域,而C语言作为一种底层编程语言,常被用于实现网络编程,尤其是Socket通信。本篇文章将深入探讨如何利用Winsock库在C语言中实现Socket通信,并专注于如何解析接收到的数据...
在本示例程序中,通过winsock2.h头文件引入了Winsock库,通过Ws2tcpip.h头文件引入了新的网络编程接口。 4. 网络编程基础 网络编程涉及发送和接收数据。TCP是面向连接的协议,它通过三次握手建立连接,并在传输过程...
7. **应用领域**:这类程序可以用于网络调试、渗透测试、网络监控,也可以用于模拟攻击或防御策略的测试,帮助理解网络通信的工作原理。 8. **使用注意事项**:构造并发送自定义数据包可能涉及法律问题,特别是当其...
综合以上分析,这个压缩包包含了一个使用C++Builder和LWIP协议栈实现的UDP通信程序的源代码。开发者可能需要理解LWIP的工作原理,配置`lwipopts.h`和`lwipoptsklp.h`以适应不同的网络环境,阅读和修改`enet_lwip.c`...
这个压缩包文件包含了相关的源代码,可能是一个简单的项目,旨在帮助学习者理解网络通信的基础以及如何在C语言中实现这样的功能。 在C语言中实现`ping`命令涉及到以下几个关键知识点: 1. **套接字编程**:在C语言...
- **源程序编译**: 在Linux环境中使用GCC(GNU Compiler Collection)编译器进行C语言源程序的编译工作。GCC是一个功能强大的编译器,支持多种编程语言。本章节将介绍GCC的基本使用方法,例如如何通过`gcc -o output...
标准C语言的socket编程是实现网络通信的基础,它允许程序通过网络发送和接收数据。本篇将详细讲解标题为“标准c语言_socket编程_范例”的知识点,以及描述中提到的server端和client端的实现。 1. **Socket基本概念*...
在这个场景中,"layer3编码C语言源码"可能是指一个实现或操作网络层协议的C语言程序。 网络层是TCP/IP模型(互联网通信的基础)的一部分,主要负责数据包在网络中的传输。这个层次的主要协议包括IP(Internet ...
- TCP/IP协议族是网络通信的基础,包括TCP、UDP等协议。 #### 九、Linux下的C开发工具介绍 - Linux下常用的C语言开发工具包括编辑器、编译器、调试器等。 - 常见的编辑器有Vim、Emacs等。 - `gcc`作为编译器被广泛...
在C++环境下,WinPcap的源代码可以为开发者提供深入理解网络通信机制的机会,同时也便于定制和扩展其功能。 首先,WinPcap的源码主要包含以下几个核心组件: 1. **驱动程序(npf.sys)**:这是WinPcap的核心部分,...
文件操作函数可能包括读写、追加、重命名、复制等,网络通信函数可能涉及到套接字编程,如TCP/UDP连接、数据发送和接收等,这些对于开发网络应用至关重要。 还有,库可能包含了线程和进程管理的函数,以支持多线程...
7. **套接字编程**:理解TCP/IP协议栈,学习如何使用socket API进行网络通信,包括创建套接字、绑定、监听、连接、接收和发送数据等。 8. **网络编程概念**:HTTP、FTP、TCP、UDP协议的理解,以及在C语言中如何实现...
综上所述,"dhcp客户端程序(很简单易懂的)"是一个自定义的DHCP客户端实现,它涵盖了DHCP协议交互、网络编程和Linux网络配置等多个方面的知识。通过对源代码的分析和调试,我们可以深入理解DHCP的工作机制和客户端...
Linux提供了套接字API(socket)进行网络编程,如`socket()`、`bind()`、`listen()`和`accept()`等函数,可以实现客户端-服务器模型,进行TCP/UDP通信。 11. **Linux下的C开发工具**: 除了GCC和GDB,Linux还提供...
4. **网络(Network)**:允许程序进行基本的TCP/UDP通信,但在这个俄罗斯方块游戏中可能未被使用。 在C语言实现的俄罗斯方块游戏中,关键知识点包括: 1. **结构体和指针**:在C语言中,结构体用于组织数据,比如...
套接字是网络通信中的一个抽象概念,它是进程间通信(IPC)的一种方式,特别是在网络环境中。在C语言中,套接字编程主要使用`<sys/socket.h>`头文件中的函数。创建一个套接字需要调用`socket()`函数,指定协议类型...
HPSocket4C是一款强大的网络通信组件,专为C语言设计,提供了丰富的API接口,用于构建高性能、稳定可靠的网络应用程序。这款静态库包含了32位和64位版本,确保了在不同架构的系统上都能顺利运行。由于是静态库,用户...
虽然没有具体列出压缩包内的文件结构,但通常“libnet-1.1.5”这样的目录结构会包含源代码文件、头文件、README文档、配置脚本、示例程序和其他构建所需的资源。开发者会解压此包,然后按照README的指示进行编译和...