linux高性能网络编程读书笔记之socket数据读写

建站服务器

数据读写分为TCP数据读写,UDP数据读写,通用数据读写
1.TCP数据读写
定义:socket是连接用户空间和内核空间,TCP和UDP是内核第一层。
解释:对于文件的read和write同样适用于socket
例子:对于TCP流数据的系统调用
1.1ssize_t recv(int sockfd,void buf,size_t len,int flags);
1.2ssize_t send(int sockfd,const void
buf,size_t len,int flags);

创新互联是一家集网站建设,子长企业网站建设,子长品牌网站建设,网站定制,子长网站建设报价,网络营销,网络优化,子长网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

参数解释:
1.3buf和len是指缓存区的位置和大小
1.3.1flags通常为0
recv成功返回实际读取到的数据的长度
注:实际读取的长度可能小于期望len,所以要多次调用recv
recv可能返回0,意味着通信对方已经关闭了连接
recv出错返回-1并设置errno

1.4send基本上同上
发送的实例代码

  int  main(int argc, char *argv[]){
                if(argc<=2){
                        printf(参数是错误);
                }

            //一系列之前的连接
            if(connect(sockfd,(struct sockaddr*) &server_address,sizeof(server_address))<0){
                    printf(连接失败);
            }else{
                    const  char* oob_data = abc;

                    const  char* normal_data = 123;

                    send(sockfd,normal_data,strlen(normal_data),0);

                    sned(sockefd,oob_data,strlen(oob_data).MSG_OOB);
                    send(sockfd,normal_data,strlen(normal_data),0);

            }
            close(sockfd);
            return 0;

        }

        //接收代码也是类似的
        //连接成功
        int  connfd = accept(sock,(struct  sockaddr *) &client,&client_addrlength);
        char  buffer[BUF_SIZE];

        memset(buffer,\'\\0\',BUF_SIZE);

        ret = recv(connfd,buffer,BUF_SIZE-1,0);

        close(connfd);
        close(sock);
        return 0;

        ./testoobrecv  192.168.1.109  54321

        ./testoobsend  192.168.1.109  54321  

        tcpdump  -ntx -i eth0  port 54321

        注:flags参数只对send和recv的当前调用生效,可以使用setsockket系统调用来永久性修改socket的某些属性

文章名称:linux高性能网络编程读书笔记之socket数据读写
分享路径:http://myzitong.com/article/cjiogs.html