Linux实现socket网络通信

简介: Linux实现socket网络通信

Linux系统中实现Socket网络通信涉及到以下主要原理和步骤:

 

### 1. **Socket概念**:

- **Socket** 是应用层与传输层之间的接口,通过Socket可以在网络上进行进程间通信。在Linux中,Socket是通过文件描述符来表示的。

 

### 2. **Socket通信模型**:

- **Socket通信** 通常基于客户端-服务器模型,包括TCP和UDP两种主要的通信协议。

   - **TCP(Transmission Control Protocol)**:面向连接的可靠通信协议,通过三次握手建立连接。

   - **UDP(User Datagram Protocol)**:无连接的通信协议,速度快但不可靠。

 

### 3. **Socket编程步骤**:

- **创建Socket**:使用`socket()`系统调用创建一个Socket。

- **绑定Socket**:使用`bind()`将Socket绑定到一个地址和端口。

- **监听连接**(仅适用于TCP):使用`listen()`开始监听连接请求。

- **接受连接**(仅适用于TCP):使用`accept()`接受客户端的连接请求。

- **建立连接**:客户端使用`connect()`连接到服务器端。

- **发送和接收数据**:使用`send()`和`recv()`发送和接收数据。

- **关闭连接**:使用`close()`关闭连接。

 

### 4. **Socket编程接口**:

- 在Linux中,Socket编程主要使用C语言的Socket编程接口,包括`socket()`、`bind()`、`listen()`、`accept()`、`connect()`、`send()`、`recv()`等函数。

 

### 5. **Socket文件描述符**:

- 在Linux中,Socket被视为一种文件描述符,可以像文件一样进行读写操作。

 

### 6. **Socket编程实例**:

- 下面是一个简单的基于TCP的Socket通信的示例:

   - 服务器端:

       1. 创建Socket:`socket()`

       2. 绑定Socket:`bind()`

       3. 监听连接:`listen()`

       4. 接受连接:`accept()`

       5. 发送和接收数据:`send()`、`recv()`

   - 客户端:

       1. 创建Socket:`socket()`

       2. 建立连接:`connect()`

       3. 发送和接收数据:`send()`、`recv()`

 

通过理解以上原理和步骤,你可以开始在Linux系统上编写Socket网络通信程序,实现不同主机之间的数据传输和通信。下面是一个简单的基于TCP的客户端-服务器模型的Socket通信示例,分别展示了服务器端和客户端的实现:

 

### 1. 服务器端代码示例:

```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
 
#define PORT 8888
 
int main() {
    int server_fd, new_socket;
    struct sockaddr_in address;
    int addrlen = sizeof(address);
    char buffer[1024] = {0};
    const char *hello = "Hello from server";
 
    // Create socket
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }
 
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(PORT);
 
    // Bind socket to port
    if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {
        perror("Bind failed");
        exit(EXIT_FAILURE);
    }
 
    // Listen for connections
    if (listen(server_fd, 3) < 0) {
        perror("Listen failed");
        exit(EXIT_FAILURE);
    }
 
    // Accept incoming connection
    if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {
        perror("Accept failed");
        exit(EXIT_FAILURE);
    }
 
    // Send message to client
    send(new_socket, hello, strlen(hello), 0);
    printf("Hello message sent to client\n");
 
    return 0;
}
```

### 2. 客户端代码示例:

 

```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
 
#define PORT 8888
 
int main() {
    int sock = 0;
    struct sockaddr_in serv_addr;
    char buffer[1024] = {0};
    const char *hello = "Hello from client";
 
    // Create socket
    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }
 
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);
 
    // Connect to server
    if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
        perror("Connection failed");
        exit(EXIT_FAILURE);
    }
 
    // Receive message from server
    read(sock, buffer, 1024);
    printf("%s\n", buffer);
 
    return 0;
}
```

 

### 编译和运行:

1. 编译服务器端代码:`gcc server.c -o server`

2. 编译客户端代码:`gcc client.c -o client`

3. 启动服务器:`./server`

4. 启动客户端:`./client`

 

以上示例展示了一个简单的基于TCP的Socket通信的客户端-服务器模型。通过这些代码,你可以理解如何在Linux系统上使用Socket编程实现网络通信。在实际应用中,你可以根据需求扩展和修改这些代码来满足特定的通信需求。

相关文章
|
15天前
|
开发者 Python
Python Socket编程:不只是基础,更有进阶秘籍,让你的网络应用飞起来!
在数字时代,网络应用成为连接世界的桥梁。Python凭借简洁的语法和丰富的库支持,成为开发高效网络应用的首选。本文通过实时聊天室案例,介绍Python Socket编程的基础与进阶技巧。基础篇涵盖服务器和客户端的建立与数据交换;进阶篇则探讨多线程与异步IO优化方案,助力提升应用性能。通过本案例,你将掌握Socket编程的核心技能,推动网络应用飞得更高、更远。
32 1
|
24天前
|
安全 Linux 网络安全
Web安全-Linux网络协议
Web安全-Linux网络协议
50 4
|
11天前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
在数字宇宙中,网络如同复杂脉络连接每个角落,Python Socket编程则是开启这一世界的钥匙。本文将引导你从基础概念入手,逐步掌握Socket编程,并通过实战示例构建TCP/UDP服务器与客户端。你将学会使用Python的socket模块进行网络通信,了解TCP与UDP的区别,并运用多线程与异步IO提升服务器性能。跟随本文指引,成为网络世界的建筑师,构建自己的网络帝国。
23 2
|
12天前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
在网络编程的世界里,Socket编程是连接数据与服务的关键桥梁。对于初学者,这往往是最棘手的部分。本文将用Python带你轻松入门Socket编程,从创建TCP服务器与客户端的基础搭建,到处理并发连接的实战技巧,逐步揭开网络编程的神秘面纱。通过具体的代码示例,我们将掌握Socket的基本概念与操作,让你成为网络编程的高手。无论是简单的数据传输还是复杂的并发处理,Python都能助你一臂之力。希望这篇文章成为你网络编程旅程的良好开端。
35 3
|
11天前
|
网络协议 开发者 Python
网络编程小白秒变大咖!Python Socket基础与进阶教程,轻松上手无压力!
在网络技术飞速发展的今天,掌握网络编程已成为开发者的重要技能。本文以Python为工具,带你从Socket编程基础逐步深入至进阶领域。首先介绍Socket的概念及TCP/UDP协议,接着演示如何用Python创建、绑定、监听Socket,实现数据收发;最后通过构建简单的聊天服务器,巩固所学知识。让初学者也能迅速上手,成为网络编程高手。
45 1
|
21天前
|
网络协议 安全 网络安全
震惊!Python Socket竟能如此玩转网络通信,基础到进阶全攻略!
【9月更文挑战第12天】在网络通信中,Socket编程是连接不同应用与服务的基石。本文通过问答形式,从基础到进阶全面解析Python Socket编程。涵盖Socket的重要性、创建TCP服务器与客户端、处理并发连接及进阶话题如非阻塞Socket、IO多路复用等,帮助读者深入了解并掌握网络通信的核心技术。
40 6
|
19天前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【9月更文挑战第14天】网络协议是机器间交流的约定格式,确保信息准确传达。主要模型有OSI七层与TCP/IP模型,通过分层简化复杂网络环境。IP地址全局定位设备,MAC地址则在本地网络中定位。网络分层后,数据包层层封装,经由不同层次协议处理,最终通过Socket系统调用在应用层解析和响应。
|
20天前
|
消息中间件 网络协议 网络安全
解锁Python Socket新姿势,进阶篇带你玩转高级网络通信技巧!
【9月更文挑战第13天】在掌握了Python Socket编程基础后,你是否想进一步提升技能?本指南将深入探讨Socket编程精髓,包括从阻塞到非阻塞I/O以提高并发性能,使用`select`进行非阻塞操作示例;通过SSL/TLS加密通信保障数据安全,附带创建SSL服务器的代码实例;以及介绍高级网络协议与框架,如HTTP、WebSocket和ZeroMQ,帮助你简化复杂应用开发。通过学习这些高级技巧,你将在网络编程领域更进一步。
28 2
|
24天前
|
机器学习/深度学习 安全 网络协议
Web安全-Linux网络命令
Web安全-Linux网络命令
19 1
|
7天前
|
网络协议
关于套接字socket的网络通信。&聊天系统 聊天软件
关于套接字socket的网络通信。&聊天系统 聊天软件
下一篇
无影云桌面