首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux 某进程socket

基础概念

在Linux系统中,进程间的网络通信通常通过套接字(socket)来实现。套接字是一种通信端点,允许不同计算机上的进程进行双向数据传输。Linux中的套接字可以分为多种类型,包括流式套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW)。

相关优势

  1. 跨平台性:套接字编程可以在不同的操作系统上运行,具有很好的可移植性。
  2. 灵活性:支持多种通信协议(如TCP、UDP),适用于不同的应用场景。
  3. 高效性:底层操作系统负责数据传输的优化,开发者可以专注于业务逻辑。

类型

  • 流式套接字(SOCK_STREAM):基于TCP协议,提供可靠的、面向连接的通信。
  • 数据报套接字(SOCK_DGRAM):基于UDP协议,提供不可靠的、无连接的通信。
  • 原始套接字(SOCK_RAW):允许直接访问底层协议,通常用于网络抓包和协议开发。

应用场景

  • Web服务器和客户端:使用TCP套接字进行HTTP请求和响应。
  • 实时音视频传输:使用UDP套接字以减少延迟。
  • 网络安全研究:使用原始套接字分析网络流量。

遇到问题及解决方法

问题:进程间通信失败

原因

  • 端口被占用。
  • 防火墙阻止了通信。
  • 网络配置错误。

解决方法

  1. 检查端口占用情况:
  2. 检查端口占用情况:
  3. 配置防火墙允许相应端口的通信:
  4. 配置防火墙允许相应端口的通信:
  5. 确认网络配置正确,IP地址和子网掩码设置无误。

示例代码:创建一个简单的TCP服务器

代码语言:txt
复制
import socket

def start_server(host='0.0.0.0', port=12345):
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((host, port))
    server_socket.listen(5)
    print(f"Server listening on {host}:{port}")

    while True:
        client_socket, addr = server_socket.accept()
        print(f"Connection from {addr}")
        data = client_socket.recv(1024)
        if data:
            print(f"Received: {data.decode('utf-8')}")
            client_socket.sendall(b"Message received")
        client_socket.close()

if __name__ == "__main__":
    start_server()

示例代码:创建一个简单的TCP客户端

代码语言:txt
复制
import socket

def send_message(host='127.0.0.1', port=12345, message="Hello, Server!"):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((host, port))
    client_socket.sendall(message.encode('utf-8'))
    response = client_socket.recv(1024)
    print(f"Server response: {response.decode('utf-8')}")
    client_socket.close()

if __name__ == "__main__":
    send_message()

通过这些基础概念、优势、类型、应用场景以及示例代码,您可以更好地理解和解决Linux进程间通过socket进行通信时遇到的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 进程间通讯(七).socket(3)

    在一般情况下,对于服务器进程问题需要调用bind函数,对于客户进程则不需要调用bind函数 ---- listen sys/socket.h 中有关于 listen 的定义 /* Prepare to...用户在调用socket函数之后,返回一个套接字sockfd. sockfd默认一个主动连接的套接字,也就是此时系统假设用户会对这个套接字调用connect函数,期待它主动与其它进程连接,然后在服务器编程中...由于系统默认时认为一个套接字是主动连接的,所以需要通过某种方式来告诉系统,用户进程通过系统调用listen来完成这件事 listen函数可使得流套接字sockfd处于监听状态,使得一个进程可以接受其它进程的请求...,从而成为一个服务器进程。...处理代码 EFAULT 参数中有一指针指向无法存取的内存空间 ENOTSOCK 参数s为一文件描述词,非socket EINTR 被信号所中断 EAGAIN 此操作会令进程阻断,但参数s的socket为不可阻断

    1K20

    进程间通讯(七).socket(1)

    前言 UNIX/Linux 是多任务的操作系统,通过多个进程分别处理不同事务来实现,如果多个进程要进行协同工作或者争用同一个资源时,互相之间的通讯就很有必要了 进程间通信,Inter process communication...,简称 IPC,在 UNIX/Linux 下主要有以下几种方式: 无名管道 ( pipe ) 有名管道 ( fifo ) 信号 ( signal ) 信号量 ( semaphore ) 消息队列 ( message...queues ) 共享内存 ( shared memory ) 套接字 ( socket ) 这里分享一下我在学习进程通讯过程中的笔记和心得 ---- 概要 ---- 套接字 之前的各种通信机制如:pipe...,FIFO,message queue,signal ,semaphore ,shared memory 都局限于同一台计算机上的进程间通信 但是要实现不同计算机(通过网络相连)上的进程互相通信,就需要网络进程间通信...(network IPC) 套接字允许进程与不同计算机上的以及同一计算机上的其它进程通信 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket 建立网络通信连接至少要一对端口号

    64820

    【Linux】: Socket 编程

    而启动的 qq,迅雷,浏览器都是进程。换句话说,进程是人在系统中的代表,只要把数据给进程,人就相当于就拿到了数据。 所以:数据传输到主机不是目的,而是手段。到达主机内部,在交给主机内的进程才是目的。...特点: 端口号是一个 2 字节(16 位)的整数 用于标识一个进程,告诉操作系统当前的数据应交给哪个进程处理 IP 地址 + 端口号 可以唯一标识网络上某台主机的某个进程 一个端口号只能被一个进程占用...理解端口号和进程 ID 在公网上: IP 地址能标识唯一的一台主机,端口号,能表示主机上唯一的一个进程 IP:port == 标识全网唯一的一个进程 这种 IP+port 的模式,就叫做 socket...每一个服务的端口号必须是众所周知的,精心设计,被客户端知晓的 注意:端口号和进程ID都可以唯一表示一个进程, 但是一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定 源端口号和目的端口号:...通过 Socket API,程序可以实现跨网络的进程间通信(如通过IP地址和端口号进行的网络通信),也可以实现本地的进程间通信。

    13910

    【Linux】:Socket编程 TCP

    函数原型(C/C++) 在 POSIX 系统(如 Linux)中,listen 函数的原型如下: int listen(int sockfd, int backlog); 在 Windows 系统中,listen...函数原型(C/C++) 在 POSIX 系统(如 Linux)中,accept 函数的原型如下: int accept(int sockfd, struct sockaddr *addr, socklen_t...EchoServer -- 多进程 上面我们写的只是单进程方面的,接下来我们来创建多进程方面的 但是这里有个问题:当前创建出子进程的时候,父进程还需等待子进程,默认这里就阻塞了 但是我们这里是让子进程去做文本处理...,如果子进程不退出/不返回,那么父进程不依然阻塞在这里嘛 阻塞之后还是无法accept,这不还是单进程嘛,但是我们还是必须得 wait,因为不 wait ,子进程一推出就会有僵尸问题 此时就需要用到 信号...EchoServer -- 线程池 引入我们之前写的【Linux】:线程库 Thread.hpp 简单封装 Thread.hpp 以及 单例模式下的【Linux】:日志策略 + 线程池(单例模式 Threadpool.hpp

    8810

    Linux进程——Linux进程与进程优先级

    如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进程优先级 1. 僵尸进程 僵尸进程就是处于僵尸状态下的进程!...所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态 僵尸状态就是Linux状态中的X死亡状态!...配置进程优先权对多任务环境的linux很有用,可以改善系统性能。...NI :NICE值,表示优先级的修改数据 NICE其取值范围是-20至19,一共40个级别 Linux进程的优先级数值范围:60~99 Linux中默认进程的优先级都是:80 Linux是支持动态优先级调整的...总结 本篇文章前部分紧贴上篇Linux进程,分析完了Linux下常见的进程状态,然后初步了解了Linux进程优先级,而进程优先级与前面内容相差较大,希望大家能够多花点时间理解!

    11110

    【Linux】Linux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    1.进程创建 1.1 fork函数 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。...新进程为子进程,而原进程为父进程 #include pid_t fork(void); 返回值:自进程中返回0,父进程返回子进程id,出错返回-1 进程调用fork,当控制转移到内核中的...else if (ret > 0) { // 异常退出 printf("sig code : %d\n", st & 0X7F); } } } 测试结果: [root@localhost linux.../a.out #等20秒退出 child exit code:10 [root@localhost linux]# ....Linux鼓励将这种应用于程序之内的模式扩展到程序之间。如下图 一个C程序可以fork/exec另一个程序,并传给它一些参数。这个被调用的程序执行一定的操作,然后通过exit(n)来返回值。

    16610

    Linux进程控制——Linux进程等待

    前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待...进程等待的概念: 我们通常说的进程等待其实是通过wait/waitpid的方式,让父进程(一般)对子进程进行资源回收的等待过程,父进程必须等待这个子进程结束后,处理它的代码和数据! 2....进程等待必要性 在了解完进程等待的概念后,新的问题出现了,我们为什么要进行进程等待,进程等待的必要性是什么?...进程等待必要性: 若子进程退出,而父进程对它不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。...父进程创建子进程的目的是为了让子进程协助自己完成任务的,而父进程需要知道子进程将任务完成得如何。这就需要通过进程等待的方式,获取子进程的退出信息。 3.

    12310
    领券