Linux下socket编程学习_Ubuntu_青云站长教程网
欢迎来到站长教程网!
  • 秒到短信接口 免费试用
  • 微信支付宝接口 秒结算
  • 中文网站排名|申请加入
  • 搜索引擎全站查询
  • 查询移动网站权重数据
  • 海外主机 台湾公司直销
  • Ubuntu

    当前位置:主页 > 服务器教程 > Ubuntu >

    Linux下socket编程学习

    时间:2019-09-11|栏目:Ubuntu|点击:
  • //下边这两个结构定义在<sys/types.h>里 //一般的地址结构,只能用于覆盖(把其他地址转换为此类型),且只能引用该地址的sa_family字段 struct sockaddr { unsigned char sa_len; //total length,整个结构体的长度,旧版本没有 unsigned short sa_family; //地址族 char sa_data[14]; //地址的值 //TCP/IP使用的地址结构 struct sockaddr_in { unsigned char sin_len; //total length short int sin_family; //地址族,一般为AF_INET(ipv4),ipv6为(AF_INET6) unsigned short int sin_port; //端口号 struct in_addr sin_addr; //ip地址 char sin_zero[8]; //没有使用(设置为0) }

    相关函数-主调用

    如果函数调用失败,都返回-1,调用失败会在全局变量error里有相应的值
    不涉及到读取、发送的时候,调用正常都返回0

    socket()

    创建套接字

    int socket(int family, int type, int protocol)

    family: 协议或地址族,TCP/IP为PF_INET,(ipv6为PF_INET6),也可以使用AF_INET
    type: 套接字类型

    流式套接字:SCOK_STREAM, TCP

    数据报套接字:SOCK_DGRAM,UDP

    原始套接字:SOCK_RAW,没有经过处理的IP数据包,可以根据自己程序的要求进行封装

    protocol:用来指定socket所使用的传输协议编号,通常设为0即可。

    调用成功返回描述符

    connect()

    为套接字指明远程端点的地址。为TCP时,connect使用三次握手建立连接;为UDP时,connect仅指明远程端点,但是不向他发送任何数据

    int connect(int sock, struct sockaddr \*serv_addr, int addrlen)

    sock: 目的服务器的socket描述符
    serv_addr:包含目的机器ip地址和端口号的指针
    addrlen:sizeof(struct sockaddr)
    调用成功返回0

    send()/write() -TCP

    linux下可以使用write(),将报文传递给目标主机

    (int sock, char\* msg, int msglen, int flags);

    flags:控制bit,指明是否接受带外数据和是否预览报文,一般为0

    write(int sock, char* buf, int buflen)

    buf:含有数据缓存的地址
    buflen:buf中的字节数
    这两个函数调用成功时都返回传送的字节数

    recv()/read() -TCP

    从套接字中接收数据

    nt recv(int sock, char\* buf, int len, int flags)

    buf:存放数据的缓存地址
    len:缓存的长度
    flags:控制bit,指明是否接受带外数据和是否预览报文一般为0

    read(int sock, char* buf, int buflen)

    调用成功都返回读取的字节数

    sendto() -UDP

    从一个结构中获取目的地址,然后发送报文

    int sendto(int sock, char \*msg, int msglen, int flags, const struct sockaddr\* to, int\* tolen);

    tolen:地址结构的字节长度
    成功时,返回已发送的字节数

    recvfrom() -UDP

    从套接字获取下一个传入报文,并记录发送者的地址

    int recvfrom(int sock, char\* buf, int buflen, int flags, struct sockaddr\* from, int\* fromlen) ``` fromlen:缓存的长度,返回时为发送者地址的大小。 成功调用时,返回报文中的字节数 ### bind() 主要由服务器使用,指明本地ip地址和协议端口号

    int bind(int sock, struct sockaddr *localaddr, int addrlen)

    成功时返回0 ### listen() -TCP 服务器调用,使套接字处于被动状态(准备接受传入请求)

    int listen ( sock,queuelen)

    queuelen:传入链接请求的队列大小(通常最大不超过5### accept() -TCP bind->listen->accept,从队列中取走下一个链接请求(或者一直在那里等待下一个连接请求到来),为请求创建新套接字,并返回新套接字描述符。

    上一篇:Facebook Android SDK 4.14使用详解

    栏    目:Ubuntu

    下一篇:IntelliJ IDEA 引入本地库并war打包

    本文标题:Linux下socket编程学习

    本文地址:http://www.jh-floor.com/fuwuqijiaocheng/Ubuntu/50156.html

    广告投放 | 联系我们 | 版权申明

    重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

    如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

    联系QQ:888888 | 邮箱:888888#qq.com(#换成@)

    Copyright © 2002-2017 青云站长教程网 版权所有 琼ICP备xxxxxxxx号