一、概述
sock_stream是一种流式套接字,我们可以把它理解成一个网络连接的双方之间建立的通道。在网络编程中,通过sock_stream可以进行双向通信,即同时进行发送和接收消息。
sock_stream套接字是基于TCP协议实现的,它提供了面向连接、可靠的数据传输服务。在数据传输过程中,数据会被分成多个数据段,这些数据段会通过网络按顺序传输到接收端进行组装,从而保证数据传输的可靠性。
二、创建sock_stream套接字
在使用sock_stream套接字之前,我们需要先创建一个套接字,下面是一个创建sock_stream套接字的示例代码:
#include #include #include int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
上面的代码中,socket函数可以创建一个套接字并返回一个套接字描述符。第一个参数AF_INET代表使用IPv4协议,第二个参数SOCK_STREAM代表创建一个sock_stream套接字,第三个参数0代表使用默认的协议。
三、连接远程主机
在创建sock_stream套接字后,我们需要连接到远程主机才能进行通信,下面是一个连接远程主机的示例代码:
#include #include #include const char* ip = "127.0.0.1"; int port = 8080; struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(ip); addr.sin_port = htons(port); connect(sock_fd, (struct sockaddr*)&addr, sizeof(addr));
上面的代码中,我们首先定义了要连接的远程主机的IP地址和端口号,然后我们通过inet_addr函数将IP地址转换成网络字节序的二进制数值,再通过htons函数将端口号转换成网络字节序的二进制数值。
最后使用connect函数来连接远程主机,第一个参数为套接字描述符,第二个参数为要连接的远程主机的地址信息,第三个参数为地址信息的长度。
四、发送和接收数据
连接到远程主机后,我们就可以通过sock_stream套接字进行数据的发送和接收。
下面是一个发送和接收数据的示例代码:
char send_buf[1024] = "hello"; char recv_buf[1024] = {0}; send(sock_fd, send_buf, sizeof(send_buf), 0); recv(sock_fd, recv_buf, sizeof(recv_buf), 0);
上面的代码中,我们首先定义了一个发送缓冲区和一个接收缓冲区。使用send函数向远程主机发送数据,第一个参数为套接字描述符,第二个参数为发送缓冲区的指针,第三个参数为发送缓冲区的大小,第四个参数为0表示使用默认的发送方式。
使用recv函数从远程主机接收数据,第一个参数为套接字描述符,第二个参数为接收缓冲区的指针,第三个参数为接收缓冲区的大小,第四个参数为0表示使用默认的接收方式。
五、关闭sock_stream套接字
在sock_stream套接字使用完毕后,我们需要关闭套接字以释放资源。
下面是一个关闭sock_stream套接字的示例代码:
#include close(sock_fd);
上面的代码中,我们使用close函数关闭sock_stream套接字,参数为套接字描述符。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/291039.html