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并请求与服务器端连接 ...
随机推荐
- face parsing
主页:https://www.sifeiliu.net/project 基于CNN face parsing: https://www.sifeiliu.net/face-parsing codes: ...
- BZOJ5252 八省联考2018林克卡特树(动态规划+wqs二分)
假设已经linkcut完了树,答案显然是树的直径.那么考虑这条直径在原树中是怎样的.容易想到其是由原树中恰好k+1条点不相交的链(包括单个点)拼接而成的.因为这样的链显然可以通过linkcut拼接起来 ...
- day5 continue 和 break的区别
# continue num = 1 while num <=10: num += 1 if num == 3: continue print(num) # continue 表示跳出本次循环后 ...
- 【转】IAR for STM8介绍、下载、安装与注册
Ⅰ.写在前面 本文讲述的内容是IAR for STM8(EWSTM8)的介绍.下载.安装与注册,其安装.注册过程和IAR for ARM类似,如果需要了解IAR for ARM相关的文章,可以到我博客 ...
- 省选模拟赛第四轮 B——O(n^4)->O(n^3)->O(n^2)
一 稍微转化一下,就是找所有和原树差距不超过k的不同构树的个数 一个挺trick的想法是: 由于矩阵树定理的行列式的值是把邻接矩阵数值看做边权的图的所有生成树的边权乘积之和 那么如果把不存在于原树中的 ...
- A1049. Counting Ones
The task is simple: given any positive integer N, you are supposed to count the total number of 1's ...
- byteify
byteify函数 Python自带的Json库会把json文件load成Unicode对象. 如果想要变成str对象的话,就要自己去encode. def byteify(input): if is ...
- 困惑2----(已经OK)
题目: 运行结果:以及图示分析 源代码: package com.mon11.day18; /** * 类说明 : * @author 作者 :chenyanlong * @version 创建时间: ...
- MySQL中的编码问题
1.查看MySQL数据库的默认编码 (1).使用status命令 mysql> status -------------- mysql Ver 14.14 Distrib 5.5.28, for ...
- 版本控制工具Git工具快速入门-Linux篇
版本控制工具Git工具快速入门-Linux篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.版本管理系统的介绍 1>.版本管理系统的特点 1.1>.自动生成备份: ...