day26-2 基于TCP协议的套接字编程
目录
- 基于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协议的套接字编程相关推荐
- udp协议没有粘包问题、基于socketserver实现并发的socket(基于tcp、udp协议)、基于udp协议的套接字、操作系统原理以及进程知识
基于udp协议的套接字通信服务端 from socket import *server=socket(AF_INET,SOCK_DGRAM) #数据报协议->udp server.bind((' ...
- 基于UDP协议的套接字+socketserver模块
基于UDP协议的套接字 user datagram protocal 数据报协议 无双向通道.自带报头.类似发短信.不会粘包 不可靠:数据发送时,丢就丢了 UDP socket: 服务端: impor ...
- python-基于tcp协议的套接字(加强版)及粘包问题
一.基于tcp协议的套接字(通信循环+链接循环) 服务端应该遵循: 1.绑定一个固定的ip和port 2.一直对外提供服务,稳定运行 3.能够支持并发 基础版套接字: from socket impo ...
- 20181225 基于TCP/IP和基于UDP/IP的套接字编程
一.TCP/IP的套接字编程 服务器端代码: import socketserver = socket.socket() # 默认是基于TCP# 基于TCP的对象serve=socket.socke ...
- 基于TCP/IP的套接字服务器端和客户端编程
(本文章内容来源于网络,仅供学习之用,别无二心,希望不要有纠纷,谢谢!) 基于 TCP 的套接字编程的所有客户端和服务器端都是从调用socket 开始,它返回一个套接字描述符.客户端随后调用conne ...
- TCP和UDP套接字编程
一.Socket简单介绍 如果要在应用层调用传输层的服务,进行相关程序的设计,就要涉及到套接字编程.套接字也称之为Socket,本质上它就是利用传输层提供的一系列Api来进行网络应用程序的设计. 网络 ...
- java socket 通信协议_java网络通信(基于TCP协议可靠通信的socket编程)
package cn.wang; import java.io.*; import java.net.*; public class Server { static int num = 1;//客户端 ...
- socket通信需要网线连接吗_从socket到TCP协议,透彻理解网络编程
进行程序开发的同学,无论Web前端开发.Web后端开发,还是搜索引擎和大数据,几乎所有的开发领域都会涉及到网络编程.比如我们进行Web服务端开发,除了Web协议本身依赖网络外,通常还需要连接数据库,而 ...
- 即时通讯系统————基于TCP协议的C/S架构(Server)
服务器端 #ifndef SERVER_H #define SERVER_H#include <sys/socket.h> #include <netinet/in.h> #i ...
最新文章
- rocketmq之producer解析
- 第1章 ZLG7290B 简介
- JVM常用启动参数大全(附带解释)
- 关于JUnit5 你必须知道的(一) JUnit5架构和环境搭建
- javaone_JavaOne 2012:101种改进Java的方法-开发人员参与为何如此重要
- C# 对轻量级(IoC Container)依赖注入Unity的使用
- java加vue实例_Vue.Js及Java实现文件分片上传代码实例
- java字符串拆分 空字符_Java字符串拆分
- Linux之系统信息操作20170330
- HTML表单颜色选择器
- pla3d打印材料密度_PLA塑料材料
- 计算机专业的学生可以考哪些证书
- 表示偏移地址的寄存器
- Android投屏神器scrcpy
- python--基于百度aip的语音交互及语音唤醒
- Python札记 -- 切片赋值
- 【Qt】QtIFW 安装包制作总结 -如何创建多组件的安装器
- Northleaf扩大业务开发团队,任命Chris O’Connor 为澳大利亚和新西兰地区董事总经理
- 视频教程-软件测试入门视频教程-软件测试
- Win10系统常见问题
热门文章
- 接口带声音输出吗_智能化时代,你的功放跟得上科技的脚步吗?
- php spl自动加载类,php – SPL自动加载最佳实践
- python lncrna_分析指令备份.sh
- c语言上机实验作业答案,第十二次C语言上机实验参考答案
- 浙江大学_包家立计算生物学_神经网络
- matlab字符串元胞数组,MATLAB字符串数组元胞数组和构架数组
- matlab figure函数_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (六)控件间的数据传递...
- 24速算c语言实训报告ppt,C语言课程设计(速算24).doc
- Webpack配置问题
- 高中信息技术——Flash动画制作刷题点整理(一)