004.UDP--拼接UDP数据包,构造ip头和udp头通信(使用原始套接字)
2015-11-19 20:55
661 查看
一.大致流程:
建立一个client端,一个server端,自己构建IP头和UDP头,写入数据(hello,world!)后通过原始套接字(SOCK_RAW)将包发出去。
server端收到数据后,打印UDP数据并发送确认消息(yes),client收到yes后将其打印。
二.其中:
client端IP:192.168.11.104 端口:8600
server端IP:192.168.11.105 端口:8686
三.注意事项:
1.运行原始套接字socket需要有root权限。
2.注意主机字节序和网络字节序的转
四.涉及的数据结构
1.ip部分的结构图:
server.c
建立一个client端,一个server端,自己构建IP头和UDP头,写入数据(hello,world!)后通过原始套接字(SOCK_RAW)将包发出去。
server端收到数据后,打印UDP数据并发送确认消息(yes),client收到yes后将其打印。
二.其中:
client端IP:192.168.11.104 端口:8600
server端IP:192.168.11.105 端口:8686
三.注意事项:
1.运行原始套接字socket需要有root权限。
2.注意主机字节序和网络字节序的转
四.涉及的数据结构
1.ip部分的结构图:
#include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #define HOST_IP "192.168.11.105" #define HOST_PORT 8686 #define MAXLINE 1024*50 int main() { int server_sockfd; int server_len, client_len; struct sockaddr_in server_address; struct sockaddr_in client_address; server_sockfd = socket(AF_INET, SOCK_DGRAM, 0); server_address.sin_family = AF_INET; server_address.sin_addr.s_addr = inet_addr(HOST_IP); server_address.sin_port = htons(HOST_PORT); server_len = sizeof(server_address); bind(server_sockfd, (struct sockaddr *)&server_address, server_len); for( ; ; ) { int len; char recv_mesg[MAXLINE]; char send_mesg[20]; client_len = sizeof(struct sockaddr_in); printf("server2 waiting!\n"); len = recvfrom(server_sockfd, recv_mesg, MAXLINE, 0, (struct sockaddr *) &client_address, (socklen_t *) &client_len); printf("收到包的长度为:%d\n",len); printf("%s\n",recv_mesg); strcpy(send_mesg,"yes"); sendto(server_sockfd, send_mesg, strlen(send_mesg), 0, (struct sockaddr *) &client_address, client_len); //将包发出去 } return 0; }
server.c
相关文章推荐
- 协议森林04 地址耗尽危机 (IPv4与IPv6地址)
- 南大软院大神养成计划——第四天
- TargetAction模式
- BootStrap中怎样学习响应式导航条
- CSS中em、rem和px的区别以及各个的优缺点
- HttpConnection及Apache HttpClient的一些常见用法的demo
- Hibernate
- 笔记:JavaScript高级程序设计(1)
- JAVA 学习过程
- c++程序编码
- Redhat安装*.jar软件包(二)
- Windows7 64位,python3.4.3,安装numpy
- MySQL学习笔记-04_Server_Config(mysqld --verbose --help)
- 【HDU5188 BestCoder Round 33C】【贪心排序+DP】zhx and contest 考试不被怀疑作弊条件下达到至少m分的最少时间
- 逻辑回归算法
- php 制作验证码
- 数据库连接配置5 -- 数据库Pool小结
- JAVA分页代码
- 社会化分享
- 社会化分享