套接字学习笔记

1.socket函数

 int socket(int domain, int type, int protocol);

 作用:创建套接字描述符 

 domain:协议族

  AF_UNIX: AF_UNIX域协议族,本机的进程通信时使用

  AF_INET: Internet协议族

  AF_ISO:  ISO协议族

 type:指定套接字类型

  SOCK_STREAM: 流套接字,面向连接的和可靠的通信类型

SOCK_DGRAM: 数据包套接字,面向非连接的和不可靠的通信类型

SOCK_RAW: 原始套接字,只对Internet协议有效,可以用来直接访问IP协议

 protocol: 指定使用哪种协议

  通常设置为0,表示使用默认协议,

        Internet 协议族的SOCK_STREAM套接字使用TCP协议;

        Internet 协议族的SOCK_DGRAM套接字使用UDP协议;

2. bind函数

 int bind(int sockfd, struct sockaddr *server_address, int addrlen);

 作用:将本地地址和套接字绑定


3. listen函数

    int listen(int sockfd, int backlog); 
    作用:将一个套接字转换为监听套接字

    因为socket函数创建的套接字只具有主动connect的功能,不具备接受连接请求的能力,listen将一个尚未连接的主动套接字转换成为被动套接字。

    在此处完成三次握手。

4. accept函数

    int accept(int sockfd, struct sockaddr *addr, int *addrlen);

   作用:从倾听套接字的完成连接队列中接收一个连接,如果完成连接队列为空,那么这个进程休眠。

   返回值:新的套接字,标识这个接收的连接;addr存储客户机地址;addrlen指向客户机地址长度。

   如果对客户机的地址和地址长度不感兴趣,可以将参数addr和addrlen设置为NULL。

5. close函数

    int close(int sockfd);

    关闭一个套接字描述符,与文件操作类似。

    返回值:成功返回0,失败返回-1

6. 设置套接字类型

     fcntl(listenFd, F_SETFL, O_NONBLOCK);-------------------设置非阻塞

     void setnonblocking(int sock)------------------设置非阻塞
{
     int opts;
     opts=fcntl(sock,F_GETFL);
      if(opts<0)
      {
          perror("fcntl(sock,GETFL)");
          exit(1);
      }
      opts = opts|O_NONBLOCK;
    if(fcntl(sock,F_SETFL,opts)<0)
     {
          perror("fcntl(sock,SETFL,opts)");
        exit(1);
    }  
}

 7. read 和write 函数

       int read(int sockfd, char *buf, int len);

       int write(int sockfd, char *buf, int len);

8.  send和recv函数

     int send(int sockfd, void *buf, size_t len, int flags);

     int write(int sockfd, void *buf,size_t len, int flags);

9. sendto和recvfrom函数

     int sendto(int sockfd, void *buf, size_t len, int flags, struct sockaddr *to, size_t addrlen);

     int recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *from, size_t *addrlen);

10. getsockname和getpeername

     int getsockname(iint socket, struct sockaddr *address, socklen_t *address_len);

      int getpeername(iint socket, struct sockaddr *address, socklen_t *address_len);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Delphi中,套(Socket)编程用到的基本类是TServerSocket与TClientSocket。这两个类全部位于ScktComp单元中。其类型定义如下: type TServerSocket = class (ScktComp.TCustomServerSocket); TClientSocket = class (ScktComp.TCustomSocket)。      在编写程序时,首先要对TServerSocket(在服务器端)与TClientSocket(在客户端)进行实例化。对于TServerSocket的对象,主要设置其服务类型(ServerType)与端口(Port)的属性,然后编写“OnClientRead”事件处理程序的代码,处理来自客户机的请求。如要启动服务器,设置TServerSocket对象的Active属性为真(即Active := True),如要停止服务器,则设置TServerSocket对象的Active属性为假(即Active := False)。      对于TClientSocket的对象,主要设置对方服务器的服务类型(ServerType)、端口(Port)以及IP地址(Address)的属性,之后编写“OnConnect与OnRead”事件处理程序的代码“OnConnect”事件处理程序用来检查与服务器连成功与否(必须在这里进行检查才有效),“OnRead”事件处理程序用来读取服务器发来的信息。如要连服务器,设置TClientSocket对象的Active属性为真(即Active := True;注意:检查连是否成功,必须在“OnConnect”事件处理程序中进行),如要断开与服务器的连,则设置TClientSocket对象的Active属性为假(即Active := False)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值