socket套接字编程

  • 网络通信中的数据必须带有:源端IP,源端端口,目的端IP,目的端端口,协议。
  • 套接字编程头文件
    #include <netinet/in.h> // struct_sockaddr_in结构体的定义以及协议的宏
    #include <arpa/inet.h> // 字节序转换接口
    #include <sys/socket.h> // 套接字接口

    1、UDP

  • UDP流程图

1.1常用接口

1、创建套接字

  • int socket(int domain, int type, int protocol);
  • domain:地址域->确定本次socket通信使用哪种协议版本的地址结构,不同的协议版本有不同的地址结构->AF_INET IPV4网络协议
  • type:套接字类型(流式套接字->SOCK_STREAM/数据报套接字->SOCK_DGRAM)
  • protocol:协议类型(通常就是传输层协议IPPROTO_TCP / IPPROTO_UDP),默认为0->流式默认tcp/数据默认udp
  • 返回值:文件描述符->非负整数->套接字所有其他接口的操作句柄;失败返回-1

2、为套接字绑定地址信息

  • int bind(int sockfd, struct sockaddr* addr, socklen_t len);
  • sockfd:创建套接字返回的操作句柄
  • addr:要绑定的地址信息,用于描述内核中socket所使用的地址信息
  • len:要绑定的地址信息长度, bind接口是统一的地址绑定接口, 但是地址结构多种多样长度不一
  • 返回值:成功返回0,失败返回-1
  • 注意 : 一般用户端不主动去绑定本机的信息, 因为地址会自动绑定合适的, 而自己绑定可能会造成端口冲突

3、接收数据->不仅仅是接收数据,还要通过接收得知这个数据是谁发的,以便进行回复

  • ssize_t recvfrom(int sockfd, char* buf, int len, int fiag, struct sockaddr* peer_addr, socklen_t* addrlen);
  • sockfd:socket操作句柄
  • buf:一块缓冲区,用于接收从接收缓冲区中取出的数据;
  • len:想要接收的数据长度
  • flag:操作选项标志,默认为0,表示阻塞操作
  • peer_addr:发送方的地址信息
  • addrlen:想要获取的地址信息长度以及返回实际长度
  • 返回值:成果返回实际接收到的数据字节长度,失败返回-1

4、发送数据

  • ssize_t sendto(int sockfd, char* data, int len, int flag, struct sockaddr* peer_addr, socklen_t addrlen);
  • sockfd:socket操作句柄
  • data:要发送的数据首地址
  • len:要发送数据长度
  • flag:默认为0,表示阻塞操作
  • peer_addr:接收方的地址信息
  • addrlen:地址信息长度
  • 返回值:成功返回实际发送数据的字节长度,失败返回-1

5、关闭套接字

  • int clsoe(int fd);

 

在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、付费专栏及课程。

余额充值