原生socket编程

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

原生Socket编程

Socket编程是一种网络编程的技术,它允许计算机之间通过网络进行数据交换。在进行原生Socket编程时,你将直接使用操作系统提供的Socket API来创建网络应用。以下是一些基本概念和步骤,以及如何在不同的编程语言中实现它们。

基本概念

  • Socket: 一个网络通信的端点,你可以通过它发送或接收数据。

  • TCP/IP: 一种网络协议,它定义了数据如何在网络中传输。

  • 端口号: 一个数字,用于区分同一台计算机上的不同服务或应用程序。

  • IP地址: 用于标识网络中的设备的地址。

编程步骤

  1. 创建Socket

  2. 绑定Socket到本地地址和端口

  3. 监听连接(仅限服务器端)

  4. 接受连接(仅限服务器端)

  5. 连接到服务器(仅限客户端)

  6. 发送和接收数据

  7. 关闭Socket

示例代码

Python

import socket

# 创建Socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定到本地地址和端口
s.bind(('localhost', 12345))

# 监听连接
s.listen(5)

# 接受连接
clientsocket, address = s.accept()

# 发送数据
clientsocket.send("Hello World".encode())

# 关闭Socket
clientsocket.close()
s.close()

Java

import java.net.ServerSocket;
import java.net.Socket;
import java.io.OutputStream;
import java.io.PrintWriter;

public class Server {
    public static void main(String[] args) throws Exception {
        // 创建ServerSocket
        ServerSocket serverSocket = new ServerSocket(12345);

        // 接受连接
        Socket clientSocket = serverSocket.accept();

        // 发送数据
        OutputStream outputStream = clientSocket.getOutputStream();
        PrintWriter printWriter = new PrintWriter(outputStream, true);
        printWriter.println("Hello World");

        // 关闭Socket
        printWriter.close();
        clientSocket.close();
        serverSocket.close();
    }
}

C++

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <iostream>

int main() {
    // 创建Socket
    int server_fd = socket(AF_INET, SOCK_STREAM, 0);

    // 定义地址结构
    struct sockaddr_in address;
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons(12345);

    // 绑定Socket到地址
    bind(server_fd, (struct sockaddr *)&address, sizeof(address));

    // 监听连接
    listen(server_fd, 3);

    // 接受连接
    int addrlen = sizeof(address);
    int new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen);

    // 发送数据
    std::string hello = "Hello World";
    send(new_socket, hello.c_str(), hello.size(), 0);

    // 关闭Socket
    close(new_socket);
    close(server_fd);

    return 0;
}

在进行原生Socket编程时,你需要对网络编程有一定的了解,并且熟悉你所使用的编程语言的Socket API。上面的示例代码仅展示了最基本的Socket操作,实际应用中可能需要处理更多的网络事件和错误。

最后更新于