美文网首页
socket 网络编程

socket 网络编程

作者: 运维开发_西瓜甜 | 来源:发表于2020-07-08 10:42 被阅读0次

网络中的 Socket 和 Socket API 是用来跨网络的消息传送的,它提供了 进程间通信(IPC) 的一种形式。网络可以是逻辑的、本地的电脑网络,或者是可以物理连接到外网的网络,并且可以连接到其它网络。英特网就是一个明显的例子,就是那个你通过 ISP 连接到的网络

Socket 应用最常见的类型就是 客户端/服务器 应用,服务器用来等待客户端的链接。

image.png

accept() 方法阻塞并等待传入连接。当一个客户端连接时,它将返回一个新的 socket 对象,对象中有表示当前连接的 conn 和一个由主机、端口号组成的 IPv4/v6 连接的元组

这里必须要明白我们通过调用 accept() 方法拥有了一个新的 socket 对象。这非常重要,因为你将用这个 socket 对象和客户端进行通信。和监听一个 socket 不同的是后者只用来授受新的连接请求

应用程序使用回环地址来与主机上的其它进程通信,这使得它与外部网络安全隔离。由于它是内部的,只能从主机内访问,所以它不会被暴露出去

socket 模块的基本使用

服务端

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 65534))

s.listen()

con, addr = s.accept()
print('链接线', con)
print('客户端', addr)

client_msg = con.recv(1024)

print('client msg:', client_msg)

con.send(client_msg.capitalize())
con.close()
s.close()

客户端

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(('127.0.0.1', 65534))

s.send(b"hello")
back_msg = s.recv(1024)
print(back_msg)

s.close()

屌丝被小仙女撩了

小仙女

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('127.0.0.1', 65534))

s.listen(3)
while True:
    print("开始狩猎")
    con, addr = s.accept()  # 等待客户端的链接请求
    print('链接线', con)
    print('客户端地址端口信息', addr)
    while True:  # 开始撩妹
        print('收消息')
        client_msg = con.recv(1024)
        if not client_msg:
            break
        print('屌丝说:', str(client_msg, encoding='utf-8'))
        send_msg = input("->:")
        con.send(client_msg)
        print("信息已发送")
    con.close()
s.close()

屌丝

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(('127.0.0.1', 65534))
while True:  # 循环的发送接收消息
    send_msg = input('>>:')
    if not send_msg:
        continue
    s.send(bytes(send_msg, encoding='utf-8'))
    back_msg = s.recv(1024)
    print('小仙女回复我了-》', str(back_msg, encoding='utf-8'))

s.close()

gevent

# pip3 install gevent
import gevent


def eat(arg):
    print("点餐...", arg)
    gevent.sleep(10)
    print("取餐...", arg)


def phone():
    print("朋友圈")
    gevent.sleep(10)
    print("抖音")


g1 = gevent.spawn(eat, 'noodles')
g2 = gevent.spawn(phone)

g1.join()
g2.join()
print("主程序结束")

猴子补丁让 gevent 识别自身之外的阻塞

from gevent import monkey
monkey.patch_all()

import gevent
import time


def eat(arg):
    print("点餐...", arg)
    time.sleep(10)
    print("取餐...", arg)

def phone():
    print("朋友圈")
    time.sleep(10)
    print("抖音")


g1 = gevent.spawn(eat, 'noodles')
g2 = gevent.spawn(phone)

g1.join()
g2.join()

print("主程序结束")

协程实现并发效果的 socket

相关文章

  • 许世伟的Go语言基础 第五章总结

    第5章 网络编程 5.1 socket编程 以往socket编程: 建立socket:使用socket()函数。 ...

  • 网络编程

    python学习笔记-网络编程 socket编程: socket()函数:socket.socket([famil...

  • 网络编程

    网络 Socket 基于TCP协议的Socket编程 基于UDP协议的Socket编程

  • 2018-09-12 day18-网络编程和http请求

    网络编程 socket 网络编程就是socket编程,socket就是套接字,就是进行数据通信的两端(服务器和客户...

  • 网络基础介绍

    网络编程的两种 TCP socket编程,是网络编程的主流。之所以叫Tcp socket编程,是因为底层是基于Tc...

  • Go语言的Socket编程

    我们在日常开发当中,几乎所有网络编程都是Socket编程,因为大部分底层网络的编程都离不开Socket编程。 什么...

  • 动脑学院架构篇-Java Socket编程基础及深入讲解

    【Socket】Java Socket编程基础及深入讲解 Socket是Java网络编程的基础,了解还是有好处的,...

  • Python网络编程

    Python网络编程 1、socket编程, 类:socket 1.server端 # socket第一个参数:地...

  • TCP通信网络编程

    1. Socket网络编程 Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链...

  • Netty

    一、网络编程基础原理 1 网络编程(Socket)概念 首先注意,Socket不是Java中独有的概念,而是一个语...

网友评论

      本文标题:socket 网络编程

      本文链接:https://www.haomeiwen.com/subject/pjfsvqtx.html