温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python Linux中的Socket编程深入解析

发布时间:2024-09-12 10:49:03 来源:亿速云 阅读:78 作者:小樊 栏目:编程语言

在Linux系统中,Socket编程是一种用于实现进程间通信(IPC)和网络通信的技术

  1. Socket类型:

    • 流式套接字(SOCK_STREAM):提供可靠的、双向的、基于连接的数据传输。常用于TCP/IP协议。
    • 数据报套接字(SOCK_DGRAM):提供不可靠的、单向的、无连接的数据传输。常用于UDP协议。
  2. 地址族:

    • AF_INET:用于IPv4地址族。
    • AF_INET6:用于IPv6地址族。
    • AF_UNIX:用于本地Unix域套接字。
  3. 创建套接字: 使用socket()函数创建套接字。例如:

    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
  4. 绑定套接字: 使用bind()函数将套接字绑定到指定的地址和端口。例如:

    server_address = ('localhost', 12345)
    sock.bind(server_address)
    
  5. 监听连接: 对于流式套接字,需要使用listen()函数开始监听连接。例如:

    sock.listen(5)
    
  6. 接受连接: 使用accept()函数接受客户端连接。例如:

    client_sock, client_address = sock.accept()
    
  7. 发送和接收数据: 使用send()recv()函数发送和接收数据。例如:

    client_sock.sendall(b'Hello, world!')
    data = client_sock.recv(1024)
    
  8. 关闭套接字: 使用close()函数关闭套接字。例如:

    client_sock.close()
    sock.close()
    

以下是一个简单的TCP服务器和客户端示例:

服务器端代码:

import socket

def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = ('localhost', 12345)
    sock.bind(server_address)
    sock.listen(5)

    while True:
        print("Waiting for a connection...")
        client_sock, client_address = sock.accept()
        print("Connected to", client_address)

        data = client_sock.recv(1024)
        print("Received:", data)

        client_sock.sendall(b'Hello, client!')
        client_sock.close()

if __name__ == '__main__':
    main()

客户端代码:

import socket

def main():
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = ('localhost', 12345)
    sock.connect(server_address)

    sock.sendall(b'Hello, server!')
    data = sock.recv(1024)
    print("Received:", data)

    sock.close()

if __name__ == '__main__':
    main()

这只是一个简单的示例,实际应用中可能需要考虑更多的细节,如错误处理、多线程或多进程等。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI