Socket 类 构造函数和常见方法

Socket类的构造函数如下:

Socket() 
         通过系统默认类型的 SocketImpl 创建未连接套接字    

Socket(InetAddress address, int port) 
         创建一个流套接字并将其连接到指定 IP 地址的指定端口号。    

Socket(InetAddress host, int port, boolean stream) 
         已过时。 Use DatagramSocket instead for UDP transport.    

Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 
         创建一个套接字并将其连接到指定远程地址上的指定远程端口。    

Socket(Proxy proxy) 
         创建一个未连接的套接字并指定代理类型(如果有),该代理不管其他设置如何都应被使用。    

protected    Socket(SocketImpl impl) 
         使用用户指定的 SocketImpl 创建一个未连接 Socket。    

Socket(String host, int port) 
         创建一个流套接字并将其连接到指定主机上的指定端口号。    

Socket(String host, int port, boolean stream) 
         已过时。 使用 DatagramSocket 取代 UDP 传输。    

Socket(String host, int port, InetAddress localAddr, int localPort) 
         创建一个套接字并将其连接到指定远程主机上的指定远程端口。    


Socket类的方法如下:

void    bind(SocketAddress bindpoint) 
         将套接字绑定到本地地址。    

void    close() 
         关闭此套接字。    

void    connect(SocketAddress endpoint) 
         将此套接字连接到服务器。    

void    connect(SocketAddress endpoint, int timeout) 
         将此套接字连接到服务器,并指定一个超时值。    

SocketChannel    getChannel() 
         返回与此数据报套接字关联的唯一 SocketChannel 对象(如果有)。    

InetAddress    getInetAddress() 
         返回套接字连接的地址。    

InputStream    getInputStream() 
         返回此套接字的输入流。    

boolean    getKeepAlive() 
         测试是否启用 SO_KEEPALIVE。    

InetAddress    getLocalAddress() 
         获取套接字绑定的本地地址。    

int    getLocalPort() 
         返回此套接字绑定到的本地端口。    

SocketAddress    getLocalSocketAddress() 
         返回此套接字绑定的端点的地址,如果尚未绑定则返回 null。    

boolean    getOOBInline() 
         测试是否启用 OOBINLINE。    

OutputStream    getOutputStream() 
         返回此套接字的输出流。    

int    getPort() 
         返回此套接字连接到的远程端口。    

int    getReceiveBufferSize() 
         获取此 Socket 的 SO_RCVBUF 选项的值,该值是平台在 Socket 上输入时使用的缓冲区大小。    

SocketAddress    getRemoteSocketAddress() 
         返回此套接字连接的端点的地址,如果未连接则返回 null。    

boolean    getReuseAddress() 
         测试是否启用 SO_REUSEADDR。    

int    getSendBufferSize() 
         获取此 Socket 的 SO_SNDBUF 选项的值,该值是平台在 Socket 上输出时使用的缓冲区大小。    

int    getSoLinger() 
         返回 SO_LINGER 的设置。    

int    getSoTimeout() 
         返回 SO_TIMEOUT 的设置。    

boolean    getTcpNoDelay() 
         测试是否启用 TCP_NODELAY。    

int    getTrafficClass() 
         为从此 Socket 上发送的包获取 IP 头中的流量类别或服务类型。    

boolean    isBound() 
         返回套接字的绑定状态。    

boolean    isClosed() 
         返回套接字的关闭状态。    

boolean    isConnected() 
         返回套接字的连接状态。    

boolean    isInputShutdown() 
         返回是否关闭套接字连接的半读状态 (read-half)。    

boolean    isOutputShutdown() 
         返回是否关闭套接字连接的半写状态 (write-half)。    

void    sendUrgentData(int data) 
         在套接字上发送一个紧急数据字节。    

void    setKeepAlive(boolean on) 
         启用/禁用 SO_KEEPALIVE。    

void    setOOBInline(boolean on) 
         启用/禁用 OOBINLINE(TCP 紧急数据的接收者) 默认情况下,此选项是禁用的,即在套接字上接收的 TCP 紧急数据被静默丢弃。    

void    setPerformancePreferences(int connectionTime, int latency, int bandwidth) 
         设置此套接字的性能偏好。    

void    setReceiveBufferSize(int size) 
         将此 Socket 的 SO_RCVBUF 选项设置为指定的值。    

void    setReuseAddress(boolean on) 
         启用/禁用 SO_REUSEADDR 套接字选项。    

void    setSendBufferSize(int size) 
         将此 Socket 的 SO_SNDBUF 选项设置为指定的值。    

static void    setSocketImplFactory(SocketImplFactory fac) 
         为应用程序设置客户端套接字实现工厂。    

void    setSoLinger(boolean on, int linger) 
         启用/禁用具有指定逗留时间(以秒为单位)的 SO_LINGER。    

void    setSoTimeout(int timeout) 
         启用/禁用带有指定超时值的 SO_TIMEOUT,以毫秒为单位。    

void    setTcpNoDelay(boolean on) 
         启用/禁用 TCP_NODELAY(启用/禁用 Nagle 算法)。    

void    setTrafficClass(int tc) 
         为从此 Socket 上发送的包在 IP 头中设置流量类别 (traffic class) 或服务类型八位组 (type-of-service octet)。    

void    shutdownInput() 
         此套接字的输入流置于“流的末尾”。    

void    shutdownOutput() 
         禁用此套接字的输出流。    

String    toString() 
         将此套接字转换为 String。   

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的TcpSocket的封装示例: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #define MAX_BUF_SIZE 1024 class TcpSocket { private: int m_sockfd; public: TcpSocket() { m_sockfd = socket(AF_INET, SOCK_STREAM, 0); if (m_sockfd == -1) { perror("socket"); exit(EXIT_FAILURE); } } ~TcpSocket() { close(m_sockfd); } bool connect(const char* ip, int port) { struct sockaddr_in server_addr; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(ip); server_addr.sin_port = htons(port); if (::connect(m_sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { perror("connect"); return false; } return true; } bool send(const char* data, int len) { int ret = ::send(m_sockfd, data, len, 0); if (ret == -1) { perror("send"); return false; } return true; } bool recv(char* buf, int& len) { int ret = ::recv(m_sockfd, buf, MAX_BUF_SIZE, 0); if (ret == -1) { perror("recv"); return false; } len = ret; return true; } }; ``` 这个封装了常用的TCP socket操作,包括创建socket、连接服务器、发送数据、接收数据等。为了方便使用,我们在内部定义了一个私有成员变量 `m_sockfd` 作为socket的文件描述符,在构造函数中初始化socket,析构函数中关闭socket。 在的公有成员函数中,我们实现了 `connect`、`send`、`recv` 等函数。在 `connect` 函数中,我们通过调用 `connect` 系统调用来连接服务器,如果连接失败则返回 false。在 `send` 函数中,我们通过调用 `send` 系统调用来发送数据,如果发送失败则返回 false。在 `recv` 函数中,我们通过调用 `recv` 系统调用来接收数据,如果接收失败则返回 false。 当然,这只是一个简单的示例,实际上还有很多其他的细节需要考虑,例如错误处理、数据分包、粘包处理等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值