当前位置:  技术问答>linux和unix

求udp源码,非源勿扰

    来源: 互联网  发布时间:2017-01-13

    本文导语:  只要源码。牛人来说,很简单很简短的几句代码! 我对udp,网络编程,socket等一无所知,多方查找,未到到一完全合适的代码,另外,我也是C无知人员,拼出C程序有很大困难。。。。诸多原因,请大牛牛们,为写一代码...




只要源码。牛人来说,很简单很简短的几句代码!


我对udp,网络编程,socket等一无所知,多方查找,未到到一完全合适的代码,另外,我也是C无知人员,拼出C程序有很大困难。。。。诸多原因,请大牛牛们,为写一代码。

要求如下:
1 linux C 程序!
2 客户端构造一个udp包,包的要求是自己构造报文的报头。(大概是为了以后能控制这个udp包)
3 服务端,监听该udp包指定的端口,并把接收到这个udp包内容打印出来。

我找了很多例子,可运行,但不符合我的要求,要自己构造报头,不要socket自动构造报头的。。

我不是懒人,是真的要求日期快到了,我却没有寻求到解决方案。愿大家给予支持,小妹在此谢过!


|
至于服务器端接收并显示的程序就更简单了,就是固定的几步,二楼给的程序基本ok,我基本没改动:
udp_server.c

/* server.c */
#include 
#include 
#include 
#include 

#define MAXLINE 8192
#define SERV_PORT 8081

int main(void)
{
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
int sockfd;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int i, n;

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);

bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));

printf("Accepting connections ...n");
while (1) {
cliaddr_len = sizeof(cliaddr);
n = recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr *)&cliaddr, &cliaddr_len);
if (n == -1)
{
perror("recvfrom error");
exit (1);
}
else if (n > 0)
printf("received from %s at PORT %dn",
inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)),
ntohs(cliaddr.sin_port));
printf ("%sn", buf);
}
}

这两个文件就基本完成你的要求了。
我的机器上过程测试如下:
1. 一个终端运行server端程序 
  gcc udp_server.c -o server
  ./server
2. 另一个终端运行客户端程序
  gcc raw_udp.c -o client
  ./client 127.0.0.1 8080 127.0.0.1 8081
3. 在提示符后面输入要发送的数据,可以有回车,按两次Ctrl+D结束输入
   输入完成后客户端会发送十次,服务器端看到接收的数据
OVER

|
/* server.c */
#include 
#include 
#include 
#include "wrap.h"

#define MAXLINE 80
#define SERV_PORT 8000

int main(void)
{
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
int sockfd;
char buf[MAXLINE];
char str[INET_ADDRSTRLEN];
int i, n;

sockfd = Socket(AF_INET, SOCK_DGRAM, 0);

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
    
Bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));

printf("Accepting connections ...n");
while (1) {
cliaddr_len = sizeof(cliaddr);
n = recvfrom(sockfd, buf, MAXLINE, 0, (struct sockaddr *)&cliaddr, &cliaddr_len);
if (n == -1)
perr_exit("recvfrom error");
printf("received from %s at PORT %dn",
       inet_ntop(AF_INET, &cliaddr.sin_addr, str, sizeof(str)),
       ntohs(cliaddr.sin_port));
    
for (i = 0; i 

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Qt:UDP:如何划分接收到的UDP包的界限
  • udp包大于1500字节网络传输会分包吗?udp tcp多大的包比较合适?
  • http走的是tcp还是udp?ssh是tcp还是udp?
  • tcp和udp套接字有何不同?在什么情况下用tcp什么情况下用udp????
  • 50求教一个菜鸟级别的UDP套接字问题,关于UDP server端只能接收一次数据的问题?在线等,一直等............
  • udp方式抓取网页
  • python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
  • udp socket客户端和udp服务端程序示例分享
  • TCP与UDP通信问题!
  • 请问下怎么关闭SUSE 9.1下UDP的checksum?
  • 如何判断udp端口可达
  • 关于epoll&udp的问题?
  • UDP包怎么生成啊?用什么函数??简单问题,帮个忙哈
  • 对于socket UDP传输,一个端口只能被一个进程绑定?
  • IP,UDP,TCP的校验和计算
  • UDP协议在实现时有没有在发送端或者接收端设置缓冲区?
  • 基于UDP的数据传输 UDT
  • 服务进程收到的第一个UDP包的远端地址不对?
  • udp问题
  • 关于udp sendto时候端口选定问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3