网络第一课(6)--setsockopt
来源:互联网 发布:淘宝重复铺货怎么举报 编辑:程序博客网 时间:2024/04/29 07:55
getsockopt, setsockopt - get and set options on sockets
int setsockopt(int sockfd, int level, int optname,
const void *optval, socklen_t optlen)
我们通过setsockopt来制做我们自已的简单udp协议头,下面的ip/mac层还有由os 帮我们做。
#include <stdio.h>
#include <netinet/in.h>#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <linux/udp.h>
#include <linux/ip.h>
//client
int main()
{
int ret=0,fd;
fd = socket(AF_INET,SOCK_RAW,IPPROTO_UDP);//创建一个原始,套接口。
if(fd<0)
{
perror("socket");return 1;
}
struct sockaddr_in recv;//填写对方的信息。
recv.sin_family = AF_INET;
recv.sin_port = htons(9527);//对方接收端口。
recv.sin_addr.s_addr = inet_addr("192.168.0.33");//对方的ip
int value = 0;//value = 0时,我们设置传输层与应用层;
//value = 1时,我们设置网络层,传输层,应用层。
int len = 4;//value len = 4字节
ret = setsockopt(fd,IPPROTO_IP,IP_HDRINCL,&value,len);//下面开始制做我们的ip头。
if(ret < 0)
{
perror("set sock option");return 1;
}
char *p = "cc is gays";//udp上层(应用层的数居)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
这里开始制做我们的udp头部。
unsigned char buff[1024]={0};
struct udphdr *udp =(struct udphdr *)buff;
udp->source = htons(999);
udp->dest = htons(9527);
udp->len = htons(8+10);//*p字符串长十个字节
udp->check = htons(0);
________________________________________________________________strcpy(buff+8,p);//将所有的数据拷贝到buff里面。
ret= sendto(fd,buff,18,0,(struct sockaddr*)&recv,16);
if(ret < 0){
perror("sendto");
return 1;
}
close(fd);
return 0;
}
++++++++++++++++++++++++++++++++++++++++++++++++
下面是接收方。
/server_UDP#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int fd = socket(AF_INET,SOCK_DGRAM,0);
if(fd < 0)
{
perror("socket");return 1;
}
char buff[1024]={0};
//接收方自己的信息。
struct sockaddr_in recv;
recv.sin_family = AF_INET;
recv.sin_port = htons(9527);
recv.sin_addr.s_addr = htonl(INADDR_ANY);
int ret = bind(fd,(struct sockaddr *)&recv,16);//监听这个端口。
if(ret < 0)
{
perror("bind");return 1;
}
struct sockaddr_in from;//用来填充发信人的信息
int len = 0;//这个结构体的大小。
ret = recvfrom(fd,buff,1024,0,(struct sockaddr *)&from,&len);
if(ret < 0)
{
perror("recvform");return 1;
}}
printf("%s\n",buff);
return 0;
- 网络第一课(6)--setsockopt
- 网络第一课(7)---setsockopt(2)
- 网络超时检测-setsockopt()
- 网络编程:讨论 Setsockopt函数(1)
- 网络编程:讨论 Setsockopt函数(三)
- 网络编程之setsockopt
- UNIX网络编程--Setsockopt
- 网络之setsockopt()
- 网络编程之setsockopt
- 网络第一课(2)
- 网络第一课(3)
- 网络第一课(4)
- 网络第一课(5)
- setsockopt()
- setsockopt()
- setsockopt()
- setsockopt()
- setsockopt()
- 《UNIX环境高级编程》笔记--口令文件,阴影文件,组文件,附加组ID,其他数据文件
- 我希望在软件开发生涯初期就知道的4件事
- C++中strlen()用法 (转)
- UVA 10626Buying Coke(dp + 记忆化搜索)
- P2P
- 网络第一课(6)--setsockopt
- UVA10905
- UPnP协议编程实践
- JMX “javax.management.NotCompliantMBeanException” 异常解决
- ios开发之某些知识点总结
- UPnP
- 8086学习笔记——传输指令
- poj 1248 Safecracker
- for循环中i++与++i的效率探究