- 论坛徽章:
- 0
|
服务器端- #include<stdio.h>
- #include<errno.h>
- #include<sys/types.h>
- #include<sys/socket.h>
- #include<netinet/in.h>
- #include<string.h>
- #include "tcpnc.h"
- #define SERVER_PORT 8888
- #define BUFF_LEN 256
- int main(int argc,char *argv[])
- {
- int sockfd;
- struct sockaddr_in serv_addr,cli_addr;
- if((sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCPNC))<0)
- {
- perror("socket ");
- exit(1);
- }
- memset(&serv_addr,0,sizeof(serv_addr));
- serv_addr.sin_family=AF_INET;
- serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
- //serv_addr.sin_port=htons(SERVER_PORT);
- memset(&cli_addr,0,sizeof(cli_addr));
- cli_addr.sin_family=AF_INET;
- cli_addr.sin_addr.s_addr=inet_addr("127.0.0.2");
- if(bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1)
- {
- perror("bind ");
- exit(1);
- }
- char buff[BUFF_LEN];
- int len;
- while(1)
- {
- len=sizeof(cli_addr);
- int n=1;
- n=recvfrom(sockfd,buff,BUFF_LEN,0,(struct sockaddr*)&cli_addr,&len);
- if(n==0)
- {
- printf("recvfrom error!");
-
- }
- buff[n]='\0';
- printf("message:%s\n",buff+40);
- printf("bytes:%d\n",n);
- }
- close(sockfd);
- return 0;
- }
复制代码 客户端- #include<stdio.h>
- #include<errno.h>
- #include<sys/types.h>
- #include<sys/socket.h>
- #include<netinet/in.h>
- #include<string.h>
- #include "tcpnc.h"
- #define SERVER_PORT 8888
- #define BUFF_LEN 256
- int main(int argc,char *argv[])
- {
- int sockfd;
- struct sockaddr_in serv_addr,cli_addr;
- if((sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCPNC))<0)
- {
- perror("socket ");
- exit(1);
- }
- memset(&serv_addr,0,sizeof(serv_addr));
- serv_addr.sin_family=AF_INET;
- serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
- //serv_addr.sin_port=htons(SERVER_PORT);
- memset(&cli_addr,0,sizeof(cli_addr));
- cli_addr.sin_family=AF_INET;
- cli_addr.sin_addr.s_addr=inet_addr("127.0.0.2");
- if(bind(sockfd,(struct sockaddr *)&cli_addr,sizeof(struct sockaddr))==-1)
- {
- perror("bind ");
- exit(1);
- }
- const int on=1;
- if(setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on))==-1)
- {
- perror("setsockopt ");
- exit(0);
- }
- char buf[256];
- char send_str[236];
- char *str;
- str=(char *)(buf+20);
- str=send_str;
- printf("please input your message:");
- scanf("%s",send_str);
- send_str[strlen(send_str)-1]='\0';
- ip_hdr *iphdr;
- iphdr = (ip_hdr*)buf;
- //udp_hdr *udphdr;
- //udphdr = (udp_hdr*)(buf+20);
- iphdr->ip_length = 5;
- iphdr->ip_version= 4;
- iphdr->ip_tos = 0;
- iphdr->ip_total_length = htons(sizeof(buf));
- iphdr->ip_id = 0;
- iphdr->ip_flags = 0x40;
- iphdr->ip_ttl = 0x40;
- iphdr->ip_protocol = 0x9c;
- iphdr->ip_cksum = 0;
- iphdr->ip_source = inet_addr("127.0.0.2");//源地址
- iphdr->ip_dest = inet_addr("127.0.0.1");//目的地址
- iphdr->ip_cksum = checksum((unsigned short*)buf, 20);
- int res =sendto(sockfd, buf, sizeof(buf), 0, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
- return 0;
- }
复制代码 为什么运行出来以后,显示
message: |
|