`

c语言udp自定义头文件 网络通信程序

 
阅读更多
//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传输系统源码.rar

    在这个“C语言UDP传输系统源码”中,我们可以深入理解UDP协议的工作原理以及如何用C语言实现一个简单的UDP通信系统。下面将详细探讨相关知识点: 1. UDP协议基础: - UDP是一种无连接的协议,发送数据前无需建立...

    C语言实现Socket通信程序

    在IT行业中,网络通信是至关重要的一个领域,而C语言作为一种底层编程语言,常被用于实现网络编程,尤其是Socket通信。本篇文章将深入探讨如何利用Winsock库在C语言中实现Socket通信,并专注于如何解析接收到的数据...

    C语言编写多线程DOS程序.pdf

    在本示例程序中,通过winsock2.h头文件引入了Winsock库,通过Ws2tcpip.h头文件引入了新的网络编程接口。 4. 网络编程基础 网络编程涉及发送和接收数据。TCP是面向连接的协议,它通过三次握手建立连接,并在传输过程...

    构造并发送IP/UDP/ICMP数据包的程序

    7. **应用领域**:这类程序可以用于网络调试、渗透测试、网络监控,也可以用于模拟攻击或防御策略的测试,帮助理解网络通信的工作原理。 8. **使用注意事项**:构造并发送自定义数据包可能涉及法律问题,特别是当其...

    UDP.zip_C Builder_c++builder UDP_zip

    综合以上分析,这个压缩包包含了一个使用C++Builder和LWIP协议栈实现的UDP通信程序的源代码。开发者可能需要理解LWIP的工作原理,配置`lwipopts.h`和`lwipoptsklp.h`以适应不同的网络环境,阅读和修改`enet_lwip.c`...

    c语言实现如果cmd中的ping.zip

    这个压缩包文件包含了相关的源代码,可能是一个简单的项目,旨在帮助学习者理解网络通信的基础以及如何在C语言中实现这样的功能。 在C语言中实现`ping`命令涉及到以下几个关键知识点: 1. **套接字编程**:在C语言...

    Linux下C语言编程教程

    - **源程序编译**: 在Linux环境中使用GCC(GNU Compiler Collection)编译器进行C语言源程序的编译工作。GCC是一个功能强大的编译器,支持多种编程语言。本章节将介绍GCC的基本使用方法,例如如何通过`gcc -o output...

    标准c语言_socket编程_范例

    标准C语言的socket编程是实现网络通信的基础,它允许程序通过网络发送和接收数据。本篇将详细讲解标题为“标准c语言_socket编程_范例”的知识点,以及描述中提到的server端和client端的实现。 1. **Socket基本概念*...

    layer3编码C语言源码.rar_layer3

    在这个场景中,"layer3编码C语言源码"可能是指一个实现或操作网络层协议的C语言程序。 网络层是TCP/IP模型(互联网通信的基础)的一部分,主要负责数据包在网络中的传输。这个层次的主要协议包括IP(Internet ...

    linux下c语言编程入门

    - TCP/IP协议族是网络通信的基础,包括TCP、UDP等协议。 #### 九、Linux下的C开发工具介绍 - Linux下常用的C语言开发工具包括编辑器、编译器、调试器等。 - 常见的编辑器有Vim、Emacs等。 - `gcc`作为编译器被广泛...

    winpcap源码c++版

    在C++环境下,WinPcap的源代码可以为开发者提供深入理解网络通信机制的机会,同时也便于定制和扩展其功能。 首先,WinPcap的源码主要包含以下几个核心组件: 1. **驱动程序(npf.sys)**:这是WinPcap的核心部分,...

    实用函数库,方便用C语言快速开发.zip

    文件操作函数可能包括读写、追加、重命名、复制等,网络通信函数可能涉及到套接字编程,如TCP/UDP连接、数据发送和接收等,这些对于开发网络应用至关重要。 还有,库可能包含了线程和进程管理的函数,以支持多线程...

    面试资格确认c语言tion-model-for-netw开发笔记

    7. **套接字编程**:理解TCP/IP协议栈,学习如何使用socket API进行网络通信,包括创建套接字、绑定、监听、连接、接收和发送数据等。 8. **网络编程概念**:HTTP、FTP、TCP、UDP协议的理解,以及在C语言中如何实现...

    dhcp客户端程序(很简单易懂的)

    综上所述,"dhcp客户端程序(很简单易懂的)"是一个自定义的DHCP客户端实现,它涵盖了DHCP协议交互、网络编程和Linux网络配置等多个方面的知识。通过对源代码的分析和调试,我们可以深入理解DHCP的工作机制和客户端...

    Linux操作系统下C语言编程入门(中文).doc

    Linux提供了套接字API(socket)进行网络编程,如`socket()`、`bind()`、`listen()`和`accept()`等函数,可以实现客户端-服务器模型,进行TCP/UDP通信。 11. **Linux下的C开发工具**: 除了GCC和GDB,Linux还提供...

    C语言实现经典俄罗斯方块小游戏(SFML库).zip

    4. **网络(Network)**:允许程序进行基本的TCP/UDP通信,但在这个俄罗斯方块游戏中可能未被使用。 在C语言实现的俄罗斯方块游戏中,关键知识点包括: 1. **结构体和指针**:在C语言中,结构体用于组织数据,比如...

    linux 网络服务器端 客户端c程序

    套接字是网络通信中的一个抽象概念,它是进程间通信(IPC)的一种方式,特别是在网络环境中。在C语言中,套接字编程主要使用`&lt;sys/socket.h&gt;`头文件中的函数。创建一个套接字需要调用`socket()`函数,指定协议类型...

    HPSocket4C 静态库(32和64位版本)

    HPSocket4C是一款强大的网络通信组件,专为C语言设计,提供了丰富的API接口,用于构建高性能、稳定可靠的网络应用程序。这款静态库包含了32位和64位版本,确保了在不同架构的系统上都能顺利运行。由于是静态库,用户...

    libnet-1.1.5.zip

    虽然没有具体列出压缩包内的文件结构,但通常“libnet-1.1.5”这样的目录结构会包含源代码文件、头文件、README文档、配置脚本、示例程序和其他构建所需的资源。开发者会解压此包,然后按照README的指示进行编译和...

Global site tag (gtag.js) - Google Analytics