目录

  • 基于TCP协议的套接字编程

    • 套接字
    • 套接字工作流程
    • 基于TCP协议的套接字编程(简单)
      • 服务端
      • 客户端
    • 基于TCP协议的套接字编程(循环)
      • 服务端
      • 客户端1
      • 客户端2

基于TCP协议的套接字编程

套接字

套接字有两种,分别是基于文件型和基于网络型

  • 基于文件类型的套接字家族:AF_UNIX,unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一文件系统间接完成通信
  • 基于网络类型的套接字家族:AF_INET

套接字工作流程

服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待用户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接

基于TCP协议的套接字编程(简单)

服务端

import socket# 创建符合TCP协议的服务端
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  # TCP协议称为流失协议,UDP称为数据报协议SOCK_DGRAM# 绑定端口
server.bind(('127.0.0.1', 8000))  # 127.0.0.1代表本地# 对端口进行监听
server.listen(5)  # 半连接池,限制的是请求书# 等待客户端连接
print('start....')
conn, client_addr = server.accept()
print('conn: ', conn)
print('client_addr: ', client_addr)# 收到消息
data = conn.recv(1024)  # 限制最大接收的字节数
print('来自客户端的数据: ', data)# 回消息
conn.send(data.upper())  # 将数据变大写# 关闭连接
conn.close()# 关闭服务器
server.close()

客户端

import socket# 创建符合TCP协议的客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务端端口
client.connect(('127.0.0.1', 8000))# 发送消息
client.send('hello'.encode('utf8'))# 接收服务端返回的消息
data = client.recv(1024)
print('来自服务端的数据:', data)# 关闭客户端
client.close()

基于TCP协议的套接字编程(循环)

服务端

import socket# 创建符合TCP协议的服务端
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口
server.bind(('127.0.0.1', 8000))# 对端口进行监听
server.listen(5)# 等待客户端连接
print('start...')# 链接循环
while True:conn, client_addr = server.accept()# 通信循环while True:try:# 接收消息data = conn.recv(1024)print('来自客户端的数据:', data)# 回消息conn.send(data)except ConnectionResetError:  # 捕捉客户端与服务端关闭连接break

客户端1

import socket# 创建符合TCP协议的客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务端端口
client.connect(('127.0.0.1', 8000))while True:# 发送消息msg = input('please enter msg>>>')client.send(msg.encode('utf8'))# 接收消息data = client.recv(1024)print('来自服务端的数据:', data.upper())

客户端2

import socket# 创建符合TCP协议的客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务端端口
client.connect(('127.0.0.1', 8000))while True:# 发送消息msg = input('please enter msg>>>')client.send(msg.encode('utf8'))# 接收消息data = client.recv(1024)print('来自服务端的数据:', data.upper())

在服务器连接客户端1时,虽然能监听客户端2,但不能给客户端2返回消息,将客户端1关闭后即断开连接,给客户端2返回数据

转载于:https://www.cnblogs.com/863652104kai/p/11091317.html

day26-2 基于TCP协议的套接字编程相关推荐

  1. udp协议没有粘包问题、基于socketserver实现并发的socket(基于tcp、udp协议)、基于udp协议的套接字、操作系统原理以及进程知识

    基于udp协议的套接字通信服务端 from socket import *server=socket(AF_INET,SOCK_DGRAM) #数据报协议->udp server.bind((' ...

  2. 基于UDP协议的套接字+socketserver模块

    基于UDP协议的套接字 user datagram protocal 数据报协议 无双向通道.自带报头.类似发短信.不会粘包 不可靠:数据发送时,丢就丢了 UDP socket: 服务端: impor ...

  3. python-基于tcp协议的套接字(加强版)及粘包问题

    一.基于tcp协议的套接字(通信循环+链接循环) 服务端应该遵循: 1.绑定一个固定的ip和port 2.一直对外提供服务,稳定运行 3.能够支持并发 基础版套接字: from socket impo ...

  4. 20181225 基于TCP/IP和基于UDP/IP的套接字编程

    一.TCP/IP的套接字编程 服务器端代码: import socket​server = socket.socket() # 默认是基于TCP# 基于TCP的对象serve=socket.socke ...

  5. 基于TCP/IP的套接字服务器端和客户端编程

    (本文章内容来源于网络,仅供学习之用,别无二心,希望不要有纠纷,谢谢!) 基于 TCP 的套接字编程的所有客户端和服务器端都是从调用socket 开始,它返回一个套接字描述符.客户端随后调用conne ...

  6. TCP和UDP套接字编程

    一.Socket简单介绍 如果要在应用层调用传输层的服务,进行相关程序的设计,就要涉及到套接字编程.套接字也称之为Socket,本质上它就是利用传输层提供的一系列Api来进行网络应用程序的设计. 网络 ...

  7. java socket 通信协议_java网络通信(基于TCP协议可靠通信的socket编程)

    package cn.wang; import java.io.*; import java.net.*; public class Server { static int num = 1;//客户端 ...

  8. socket通信需要网线连接吗_从socket到TCP协议,透彻理解网络编程

    进行程序开发的同学,无论Web前端开发.Web后端开发,还是搜索引擎和大数据,几乎所有的开发领域都会涉及到网络编程.比如我们进行Web服务端开发,除了Web协议本身依赖网络外,通常还需要连接数据库,而 ...

  9. 即时通讯系统————基于TCP协议的C/S架构(Server)

    服务器端 #ifndef SERVER_H #define SERVER_H#include <sys/socket.h> #include <netinet/in.h> #i ...

最新文章

  1. rocketmq之producer解析
  2. 第1章 ZLG7290B 简介
  3. JVM常用启动参数大全(附带解释)
  4. 关于JUnit5 你必须知道的(一) JUnit5架构和环境搭建
  5. javaone_JavaOne 2012:101种改进Java的方法-开发人员参与为何如此重要
  6. C# 对轻量级(IoC Container)依赖注入Unity的使用
  7. java加vue实例_Vue.Js及Java实现文件分片上传代码实例
  8. java字符串拆分 空字符_Java字符串拆分
  9. Linux之系统信息操作20170330
  10. HTML表单颜色选择器
  11. pla3d打印材料密度_PLA塑料材料
  12. 计算机专业的学生可以考哪些证书
  13. 表示偏移地址的寄存器
  14. Android投屏神器scrcpy
  15. python--基于百度aip的语音交互及语音唤醒
  16. Python札记 -- 切片赋值
  17. 【Qt】QtIFW 安装包制作总结 -如何创建多组件的安装器
  18. Northleaf扩大业务开发团队,任命Chris O’Connor 为澳大利亚和新西兰地区董事总经理
  19. 视频教程-软件测试入门视频教程-软件测试
  20. Win10系统常见问题

热门文章

  1. 接口带声音输出吗_智能化时代,你的功放跟得上科技的脚步吗?
  2. php spl自动加载类,php – SPL自动加载最佳实践
  3. python lncrna_分析指令备份.sh
  4. c语言上机实验作业答案,第十二次C语言上机实验参考答案
  5. 浙江大学_包家立计算生物学_神经网络
  6. matlab字符串元胞数组,MATLAB字符串数组元胞数组和构架数组
  7. matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件间的数据传递...
  8. 24速算c语言实训报告ppt,C语言课程设计(速算24).doc
  9. Webpack配置问题
  10. 高中信息技术——Flash动画制作刷题点整理(一)