php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 442|回复: 0

内核socket通信

[复制链接]

2571

主题

2578

帖子

9095

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
6402
贡献
0
注册时间
2021-4-14
最后登录
2024-3-24
在线时间
652 小时
QQ
发表于 2022-5-23 16:27:05 | 显示全部楼层 |阅读模式
[mw_shl_code=c,true]#include<linux/in.h>  
#include<linux/inet.h>  
#include<linux/socket.h>  
#include<net/sock.h>  
  
#include<linux/init.h>  
#include<linux/module.h>  
  
int myclient(void){  
    struct socket *sock;  
    struct sockaddr_in s_addr;  
    unsigned short portnum=0x8870;  
    int ret=0;  
  
    memset(&s_addr,0,sizeof(s_addr));  
    s_addr.sin_family=AF_INET;  
    s_addr.sin_port=htons(portnum);  
    //s_addr.sin_addr.s_addr=inet_addr("127.0.0.1"); /*I am not sure whether the ined_addr is right, may should be htonl*/  
    s_addr.sin_addr.s_addr=in_aton("192.168.168.5");  
    sock=(struct socket *)kmalloc(sizeof(struct socket),GFP_KERNEL);  
      
    /*create a socket*/  
    ret=sock_create_kern(AF_INET, SOCK_STREAM,0,&sock);  
    if(ret<0){  
        printk("client:socket create error!\n");  
        return ret;  
    }  
    printk("client: socket create ok!\n");  
  
    /*conncet server*/  
    ret=sock->ops->connect(sock,(struct sockaddr *)&s_addr, sizeof(s_addr),0);  
    if(ret!=0){  
        printk("client:connect error!\n");  
        return ret;  
    }  
    printk("client:connect ok!\n");  
      
    /*kmalloc sendbuf*/  
    char *sendbuf="hahahha client messsage! \n";  
    int len=sizeof("client message!");  
      
    /*send message */  
    struct kvec vec;  
    struct msghdr msg;  
      
    vec.iov_base=sendbuf;  
    vec.iov_len=len;  
    memset(&msg,0,sizeof(msg));  
      
    ret= kernel_sendmsg(sock,&msg,&vec,1,len);  
    if(ret<0){  
        printk("client: kernel_sendmsg error!\n");  
        return ret;   
    }else if(ret!=len){  
        printk("client: ret!=len\n");  
    }  
    printk("client send size=%d\n",ret);  
    printk("client:send ok!\n");  
  
    sock_release(sock);  
    return ret;  
}  
  
static int client_init(void){  
    printk("client:init\n");  
    myclient();  
    return 0;  
}  
  
static void client_exit(void){  
    printk("client exit!\n");  
}  
  
module_init(client_init);  
module_exit(client_exit);  
MODULE_LICENSE("GPL");  [/mw_shl_code]





上一篇:python用于检查照片是否符合人脸识别使用要求
下一篇:压缩机部件MATLAB仿真
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )51LA统计

GMT+8, 2024-3-28 19:47 , Processed in 0.177134 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表