Linux Socket编程之旅(linuxsoket)

Linux Socket编程之旅

随着计算机技术的发展,Linux Socket编程已经成为构建可靠网络程序的核心技术。 Socket就像一个虚拟专用电话线, 用以在不同的程序之间传输或共享数据。 通过Socket, 我们可以建立一个网络中的客户端/服务端程序, 其中客户端请求服务, 服务端返回响应。

Socket详细细分成几种, 如TCP/IP Socket、 Unix-domain Socket等等。 TCP/IP Socket是基于网络的, 我们可以在Linux中使用它来与远程客户端或服务端通信, Unix-domain Socket仅限在本机内使用。

要开始Linux Socket编程, 首先需要引入socket、sys/socket.h、netinet/in.h和arpa/inet.h这几个头文件, 并定义Socket函数数据类型用于控制socket的行为, 这些在后文中都将提到。

接下来分别编译client端和server端的代码, client端需要创建socket, 用于接收服务。 对于server端, 首先它需要绑定ip和端口(bind()函数), 然后监听客户端的连接(listen()函数), 当收到客户端的连接时, 就可以建立连接(accept()函数)、 并与客户端进行沟通(send()/ recv() 函数)。

下面以一个TCP Socket 客户端/服务器程序为例:

Client端:

#include

#include

#include

#include

#include

int main(int argc, char* argv[])

{

int sock_fd;// client 端socket 句柄

// 1. 创建一个socket,使用socket()函数

if((sock_fd = socket(AF_INET, SOCK_STREAM, 0))== -1)

{

printf(“create socket failed!”);

exit(1);

}

printf(“Socket created!\n”);

// 2. 连接服务器

struct sockaddr_in serv_addr;

serv_addr.sin_family = AF_INET;

serv_addr.sin_port = htons(12345);

serv_addr.sin_addr.s_addr = inet_addr(“127.0.0.1”);

if (connect(sock_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)

{

printf(” connect socket failed!”);

exit(1);

}

printf(“Connected to server!\n”);

// 3. 向服务器发数据

const char* buf = “Hello World!”;

send(sock_fd, buf, strlen(buf), 0);

// 4. 接收服务器回应

char recv_buf[1024];

memset(recv_buf, 0, sizeof(recv_buf));

if (recv(sock_fd, recv_buf, 1024, 0) == -1)

{

printf(” recv failed!”);

exit(1);

}

printf(“Received:%s\n”, recv_buf);

// 5. 关闭socket

close(sock_fd);

return 0;

}

Server端:

#include

#include

#include

#include

#include

int main(int argc, char* argv[])

{

int sock_fd, client_fd;

// 1. 创建socket

if((sock_fd = socket(AF_INET, SOCK_STREAM, 0))== -1)

{

printf(“create socket failed!”);

exit(1);

}

printf(“Socket created!\n”);

// 2. socket 绑定ip和端口

struct sockaddr_in serv_addr;

serv_addr.sin_family = AF_INET;

serv_addr.sin_port = htons(12345);

serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);

if (bind (sock_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)

{

printf(“bind failed!”);

exit(1);

}

printf(“Bind Success!\n”);

// 3. 监听客户端

if (listen(sock_fd, 10) == -1)

{

printf(“listen failed!”);

exit(1);

}

printf(“Listening…\n”);

client_fd = accept(sock_fd, (struct sockaddr *)NULL, NULL);

printf(“Connected from client!\n”);

// 4. 接收数据

char recv_buf[1024];

memset(recv_buf, 0, sizeof(recv_buf));

if (recv(client_fd, recv_buf, 1024, 0) == -1)

{

printf(“recv failed!”);

exit(1);

}

printf(“Received:%s\n”,recv_buf);

// 5. 返回回应

const char* buf = “Thank you!”;

send(client_fd, buf, strlen(buf), 0);

// 6. 关闭套接字描述符

close(sock_fd);

close(client_fd);

return 0;

}

上面这个例子中, 两个程序之间的通信过程已经在上面的注释中体现了, 具体的细节由发送、 接收等函数实现。 如此我们在

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/160168.html<

(0)
管理的头像管理
上一篇2025-03-17 15:34
下一篇 2025-03-17 15:35

相关推荐

  • 三层防护和七层防护分别是什么意思,有什么区别?

    在网络安全中,三层防护指网络层安全防护,七层防护指应用层安全防护,两者分别对应通信链路和业务逻辑的安全, 三层防护通过IP地址、端口和协议规则过滤流量,七层防护则深入分析HTTP/HTTPS请求内容,拦截SQL注入、跨站脚本等攻击,理解这两个层次,是构建安全架构的前提,三层防护:网络层的基础防线什么是网络层防护……

    2026-07-26
    0
  • 为什么独立服务器比云服务器性能好,怎么选?

    独立服务器相比云服务器,性能优势的核心在于物理资源独占与无虚拟化开销,在稳定性、延迟和吞吐量上显著优于共享环境,性能差异的根本原因:虚拟化与物理隔离独立服务器与云服务器在性能表现上的差距,根本原因在于底层架构的差异,云服务器基于虚拟化技术,将物理资源切分给多个租户,每个实例都运行在虚拟化层之上,这个虚拟化层(H……

    2026-07-26
    0
  • GEO友好的服务器标准有哪些,如何判断?

    SEO友好的服务器,核心标准是速度、稳定性、IP纯净度、安全合规以及服务商资质,缺一不可, 选择服务器不能只看配置,更要关注机房基础设施、网络质量、IP信誉以及服务商是否持牌经营,符合这些条件的服务器,才能让百度爬虫顺利抓取、用户获得良好体验,从而稳定提升排名,速度:服务器响应时间与硬件配置百度最新的核心算法中……

    2026-07-26
    0
  • 机房T3等级是什么意思?,T3机房等级标准有哪些?

    机房T3等级,代表数据中心具备并行维护能力和N+1冗余架构,可用性达到99.982%级别,是当前企业托管业务的主流选择,什么是机房T3等级?核心定义与行业标准机房T3等级源自Uptime Institute的数据中心分级标准,也对应TIA-942的Rating 3等级,这个等级的核心特征就是可并行维护——在任意……

    2026-07-26
    0
  • 服务器SLA服务协议是什么有什么用,有哪些注意事项?

    服务器SLA服务协议是服务商与用户之间关于服务可用性、性能等方面的正式承诺,它直接决定了业务稳定性和运维成本,什么是服务器SLA服务协议服务器SLA(Service Level Agreement)是服务等级协议的缩写,在IDC和云服务领域,它是一份具有法律效力的合同附件,明确服务商必须提供的服务水平基准,这份……

    2026-07-26
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注