Linux系统中的Socket编程
Linux系统教程
2023-05-11 17:39
1671
Linux 系统中的 Socket 编程
Socket 是一种在网络中,进行进程间通信或者网络通信的方式。在 Linux 系统中,Socket 被广泛应用于网络通信领域,是开发网络应用软件的重要组件之一。
Socket 编程基础
Socket 编程是基于传输层 TCP/IP 协议而展开的,主要涉及到一些概念和函数的使用,下面对基础进行简要介绍。
概念
Socket 通信是一种面向连接的通信方式,它是通过套接字(Socket)来实现的。
套接字定义了通信的一些基本参数,包括地址族、套接字类型、协议类型、监听的网络接口等。
函数
- socket(): 创建一个套接字
- bind(): 绑定套接字到一个地址
- listen(): 开始监听客户端连接
- accept(): 接受连接请求并返回一个新的套接字
- connect(): 与服务器建立连接
- send(), recv(): 发送和接收数据
- close(): 关闭套接字
Socket 编程实践
下面通过一个简单的 Server-Client 示例来展示基本的 Socket 编程实现。
Server 端代码
#include <sys/socket.h>
#include <netinet/in.h>
int main(){
// 创建 socket
int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
// 绑定端口
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(8080);
server_address.sin_addr.s_addr = INADDR_ANY;
bind(sock_fd, (struct sockaddr *)&server_address, sizeof(server_address));
// 监听连接
listen(sock_fd, 5);
// 接受连接请求
struct sockaddr_in client_address;
int client_fd = accept(sock_fd, (struct sockaddr *)&client_address, NULL);
// 发送数据
char *message = "Hello, Client!";
send(client_fd, message, strlen(message), 0);
// 关闭套接字
close(client_fd);
close(sock_fd);
}
Client 端代码
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(){
// 创建 socket
int sock_fd = socket(AF_INET, SOCK_STREAM, 0);
// 连接服务器
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &server_address.sin_addr);
connect(sock_fd, (struct sockaddr *)&server_address, sizeof(server_address));
// 接收数据
char buffer[1024];
recv(sock_fd, buffer, 1024, 0);
printf("%s\n", buffer);
// 关闭套接字
close(sock_fd);
}
总结
Socket 编程是在网络通信领域中应用最广泛的编程方式之一,是 Linux 开发者必备的基础知识之一。本文简要介绍了 Socket 编程的概念、相关函数的使用,以及通过一个简单的 Server-Client 示例展示了 Socket 编程的基本实现。