当前位置: 首页 > news >正文

SOCKET建立简单的tcp服务端与客户端通信

socket是什么

socket可以使两台机子建立连接,就像连接风扇与电源的插座一样,socket可以使服务端与客户端建立连接,服务端就像供电厂,而客户端就像用电器,而socket就是连接二者的插座。

建立简单的连接

  1. 如果我们想在客户端与服务端建立连接收发数据就需要分别执行socket方法。
    在这里插入图片描述

  2. 服务端依次执行bind() linten() acctpt()

在这里插入图片描述

  1. 客户端执行connect()请求与服务端连接在这里插入图片描述
  2. 之后服务端与客户端都可以执行send() recv()发送与接收消息

python实现

server

  1. socket()
  2. bind()绑定ip和端口
  3. listen()监听
  4. accept()等待连接。返回新的socket对象(用于收发数据)与addr(存有客户端IP与PORT)
  5. send()/recv()
  6. close()
import socket

IP = '0.0.0.0'
PORT = 50000
BUF_LEN = 512

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

listenSocket.bind((IP, PORT))

listenSocket.listen(5)
print('[*] Socket is listening..')
data, addr = listenSocket.accept()
print('[*] Got connection from', addr)
while True:
    received_data = data.recv(BUF_LEN)

    if not received_data:
        break
    info = received_data.decode()
    print(f'[*] Received {info}')
    data.send(f'服务端收到消息{info}'.encode())

data.close()
listenSocket.close()

client

  1. socket()
  2. connect()申请连接
  3. send()/recv()
  4. close()
import socket

IP = '127.0.0.1'
PORT = 50000
BUFFER_SIZE = 512

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

dataSocket.connect((IP, PORT))

while True:
    toSend = input('Enter a message to send: ')
    if toSend == '':
        break
    dataSocket.send(toSend.encode())
    receivedData = dataSocket.recv(BUFFER_SIZE)
    if not receivedData:
        break
    print(receivedData.decode())

dataSocket.close()
http://www.dtcms.com/a/20906.html

相关文章:

  • 【动态路由】系统web url整合系列【springcloud-gateway实现】【不改hosts文件版】组件一:多个Eureka路由过滤器
  • 【深度解析】图解Deepseek-V3模型架构-混合专家模型(MoE)
  • 海尔小红书年度规划方案拆解
  • rabbitmq五种模式的总结——附java-se实现(详细)
  • Task03:Ollama API 的使用
  • Spring AI集成DeepSeek:三步搞定Java智能应用
  • AI芯片NVDA、AVGO、MRVL、AMD估值分析
  • 【Python】01-基础
  • 使用JavaScript实现深浅拷贝
  • 升级 SpringBoot3 全项目讲解 — 别再使用 Optional 了,请使用 Jspecify 来替代它
  • 怎么能在互联网上找到某个专业的专业资料?
  • 在 UniApp 项目中设置多语言
  • 2025.2.16机器学习笔记:TimeGan文献阅读
  • c#模拟鼠标点击左键
  • 【开源项目】图床工具Easyimage保姆级搭建
  • Windows编程:用 VS2019 编写C语言程序
  • 103-《茶靡花》
  • rtsp rtmp 跟 http 区别
  • Flask框架入门完全指南
  • 传统数组 vs vector和list
  • 【Python爬虫(5)】HTTP协议:Python爬虫的基石
  • Python版本管理器之Pyenv-win介绍与安装
  • DeepSeek笔记(二):DeepSeek局域网访问
  • 宝塔面板开始ssl后,使用域名访问不了后台管理
  • JSON入门略要
  • Lua 数据库访问
  • 30个常用的DEEPSEEK提示词
  • “单击以重新设置PIN”的解决方案
  • 算法-链表篇04-两两交换链表中的节点
  • DeepSeek告别服务器繁忙