TCP网络协议通信原理(客户端和服务器端)
下面直接用代码来说明TCP协议的基础知识:
服务器端代码块:
from socket import *
from time import ctime
'''
指定主机地址、工作端口号、接收缓存的长度
服务器端的HOST为空,表示它可以使用任意可用的地址
'''
HOST=''
PORT=
BUFSIZ=
ADDR=(HOST,PORT) # 创建套接字 ,把套接字绑定到服务器地址,开启TCP监听
tcpSvrSock=socket(AF_INET,SOCK_STREAM)
tcpSvrSock.bind(ADDR)
tcpSvrSock.listen()
while True:
'''
不断等待接收客户端的连接。我们通过accept()
获取到客户端的tcpCliSock和addr,于是后续可以通过这个
tcpCliSock专门处理该客户端的事务(从而与其他请求的客户端区分开来)
'''
tcpCliSock,addr=tcpSvrSock.accept()
print('内容来自:',addr)
# print('tcpCliSock:',tcpCliSock)
while True:
data=tcpCliSock.recv(BUFSIZ)
if not data:
break
# 不为空则把消息解析出来,添加时间戳
data=data.decode('utf-8')
print(data)
data1=input('回复客户端:') respMsg='[%s]%s'%(ctime(),data1)
# 过重新编码成ASCII字节后,通过send()发送回去给客户端
tcpCliSock.send(bytes(respMsg,'utf-8'))
tcpCliSock.close()
tcpSvrSock.close()
客户端代码块:
from socket import *
'''
指定主机地址、工作端口号、接收缓存的长度
这里的HOST为服务器端所在主机的地址,由于我是在本地进行通信测试的,
所以地址设置为127.0.0.(localhost)。在实际网络通信的时候,根据
具体的情况进行相应的修改。客户端填写的PORT必须与服务器填写的PORT
对应才能正常通信。
'''
HOST='127.0.0.1'
PORT=
BUFSIZ=
ADDR=(HOST,PORT) # 创建套接字 ,主动调用并通过connect()连接到服务器。
tcpCliSock=socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
data=input('>>>')
if not data:
break
tcpCliSock.send(bytes(data,'utf-8'))
if not data:
break
# 接收服务器返回的数据
rscData=tcpCliSock.recv(BUFSIZ)
print(rscData.decode('utf-8')) tcpCliSock.close() '''
如果我们想要将代码改成相应的ipv6的形式,
我们只需要把HOST改成“::”,sock_family改成AF_INET6即可。
'''
更多详细内容可以参见:https://blog.csdn.net/sinat_36645384/article/details/79128137
更多端口协议见:https://www.cnblogs.com/taoke2016/p/9047981.html
TCP网络协议通信原理(客户端和服务器端)的更多相关文章
- [转]HTTP协议通信原理
本文转自<HTTP协议通信原理> 了解HTTP HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则.计算机专家设计出HTTP,使HTTP客 ...
- HTTP协议通信原理 与常见报错信息
HTTP协议通信原理 请求报文 请求行 GET index.html HTTP 1.1 请求方法:get 读取服务器数据内容 post 提交存储服务端数据(用户注册) 协议版本: ht ...
- 嵌入式操作系统VxWorks中网络协议存储池原理及实现
嵌入式操作系统VxWorks中网络协议存储池原理及实现 周卫东 蔺妍 刘利强 (哈尔滨工程大学自动化学院,黑龙江 哈尔滨,150001) 摘 要 本文讨论了网络协议存储池的基本原理和在嵌入式操作系 ...
- TCP/IP协议工作原理简述
TCP/IP协议工作原理简述 // */ // ]]> TCP/IP协议工作原理简述 Table of Contents 1 概要 2 应用层 3 传输层 4 网络层 5 链路层 1 概要 ...
- c/c++ 网络编程 单纯http客户端,服务器端
网络编程 单纯http客户端,服务器端 1,http客户端 2,http服务器端 http客户端: #include <stdio.h> #include <sys/types.h& ...
- Ubuntu 18.04开启TCP网络协议BBR加速的方法(Google BBR 拥塞控制算法)
TCP BBR 是Google给出的一个改良版的tcp网络协议,相当于在已有TCP协议的基础上打了个补丁的意思,这个改良版TCP协议对拥塞控制有很好的支持,对于网络较差的环境有不错的应用场景,当然这里 ...
- http协议通信原理的问答
1.dns怎么解析?答:假设一个网站www.tianyik.com的ip是192.168.31.36 浏览器(URL:www.tianyik.com)--> 客户机 h ...
- 【TCP网络协议问题】
题目描述 在如今的网络中,TCP 是一种被广泛使用的网络协议,它在传输层提供了可靠的通信服务.众所周知,网络是存在时延的,例如用户先后向服务器发送了两个指令 op1 和 op2,并且希望服务器先处理指 ...
- java实例练习——基于TCP/IP协议的多客户端通信
先说一下大概的思路: 应用多线程来实现服务器与多客户端之间的通信 1.服务器端创建ServerSocket,循环调用accept()等待客户端连接: 2.客户端创建一个Socket并请求与服务器端连接 ...
随机推荐
- Lodop打印二维码内容长度不同如何大小相同
利用Loodop打印控件打印二维码的时候,往往传入的数值是变量,有的只有一个数字,有的却一大堆数字和字母,根据内容长度不同,二维码大小也不同,这样如果批量打印二维码标签,传入的数据是不同的,会造成有的 ...
- Square Root
Square RootWhen the square root functional configuration is selected, a simplified CORDIC algorithm ...
- 13函数式编程&Stream流
13.1常用的函数式接口总结 接口名称 方法名称 抽象/默认 延迟/终结 方法描述 Supplier get 抽象 终结 供给型接口,无参有返回值,主要用于 Consumer accept 抽象 ...
- 【转】Linux常用命令
日常操作命令 查看当前所在的工作目录的全路径 pwd 12 [root@localhost ~]# pwd/root 查看当前系统的时间 date 12345678 [root@localhost ~ ...
- Java_io体系之RandomAccessFile简介、走进源码及示例——20
Java_io体系之RandomAccessFile简介.走进源码及示例——20 RandomAccessFile 1. 类功能简介: 文件随机访问流.关心几个特点: 1.他实现的接口不再 ...
- 网络调试 adb connect
$su #stop adbd #setprop service.adb.tcp.port 5555 #start adbd 然后在电脑端打开cmd,输入adb命令: #adb connect < ...
- 省选前的th题
沙茶博主终于整完了知识点并学完了早该在NOIP之前学的知识们 于是终于开始见题了,之前那个奇怪的题单的结果就是这个了 题目按沙茶博主的做题顺序排序 个人感觉(暂时)意义不大的已被自动忽略 洛谷 491 ...
- Luogu 1080 【NOIP2012】国王游戏 (贪心,高精度)
Luogu 1080 [NOIP2012]国王游戏 (贪心,高精度) Description 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己 ...
- 洛谷P3622 动物园
题意:给定一个n个元素的圈,m个条件.满足一个条件需要选某些元素或不选另一些元素. 问最多能满足多少条件.每个条件所关联的元素,最远的两个距离不会超过5. 解:想了半天...... 首先能想到断环成链 ...
- 【POJ1179】Polygon 区间DP
这道题是典型的环形石子归并模型,破环成链后时间复杂度为\(O(n^3)\) 不过,因为题目中所给的数字可能是负数,仅仅记录区间内合并之后的最大值并不满足动态规划的最优子结构性质.因此,还需要额外记录下 ...