TCP客户端与服务端
简介
socket(简称:套接字)是进程之间通信的一个工具,好比现实中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个socket,负责进程之间的网络数据传输,好比数据的搬运工
一、TCP客户端开发
import socket# 1.创建客户端套接字对象
# 参数1:ipv4(ip协议的版本)
# 参数2:选择协议(SOCK_STREAM==>TCP协议)
tcp_client_socket = socket.socket(socket.AF_INEF, socket.SCOK_STREAM)# 2.和服务端套接字建立连接
# 参数:元组(有两个元素!)
# 参数1:服务器的ip地址(字符串)
# 参数2:服务器的端口号(数字)
tcp_client_socket.connect(("127.0.0.1", 8080))# 发送数据的时候需要先转换成二进制
data = '123'
# 编码
data = data.encode("utf8")# 3.发送数据
tcp_client_socket.send(data)# 4.接受数据
# 参数:以字节为单位的接受的数据的大小
recv_data = tcp_client_socket.recv(1024)# 5.关闭客户端套接字
tcp_client_socket.close()
二、服务端开发
import socket# 1.创建服务端的套接字对象
# 参数1:ipv4
# 参数2:tcp协议
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.绑定端口号
# 参数:元组(两个元素) 参数1:ip地址(字符串) 参数2:端口号(数字)
# 参数1不写就是默认本地IP地址(127.0.0.1)
tcp_server_socket.bind(("参数1", 8080))# 3.设置监听
# 参数:最大监听个数(排队等待处理的最大个数)
tcp_server_socket.listen(128)# 4.阻塞等待接受客户端的连接请求
# 返回值是一个元组(有两个元素)
# 元素1:和客户端进行通信的socket 元素2:客户端的地址信息(ip,端口号)
# 通过拆包语法 我们分别获取两个元素(client_socket负责处理客户请求)
client_socket, client_addr = tcp_server_socket.accept()# 5.接受数据
# 参数:接受数据的大小(字节)
client_data = client_socket.recv(1024)
# 对二进制的数据解码
client_data = client_data.decode()
print(client_data)# 6.发送数据
send_data = "123".encode()
client_socket.send(send_data)# 7.关闭套接字
client_socket.close()
tcp_server_socket.close()
三、端口复用
# 1.创建服务端套接字对象
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 在创建服务端后面设置端口复用
# 端口复用(一旦服务端关闭,端口马上释放)
# setsocketopt: 设置socket选项
# 参数1:socket选项列表(SOL)
# 参数2:地址复用
# 参数3:True:开启选项(默认都是不开启)
tcp_server_socket.setsocketopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
四、持续接受数据,判断客户端关闭
(对中间的部分代码进行改变)
while True:# 5.服务端接受数据client_data = client_socket.recv(1024)# 如果接受的数据长度为零,则证明客户端关闭if len(client_data) == 0:print("客户端关闭!")break# 对二进制的数据解码client_data = client_data.encode()print(client_data)# 6.发送数据send_data = "123".encode()client_data.send(send_data)
五、服务端的多任务
import socket
import multiprocessingdef handler_client_request(client_socket):""" 处理客户端请求 """while True:# 接受数据client_data = client_socket.recv(1024)# 如果接受的数据长度为零,则证明客户端关闭if len(client_data) == 0:print("客户端关闭!")break# 对二进制的数据解码client_data = client_data.encode()print(client_data)# 发送数据send_data = "123".encode()client_data.send(send_data)def main():# 1.创建服务端的套接字对象# 参数1:ipv4# 参数2:tcp协议tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 2.绑定端口号# 参数:元组(两个元素) 参数1:ip地址(字符串) 参数2:端口号(数字)# 参数1不写就是默认本地IP地址(127.0.0.1)tcp_server_socket.bind(("参数1", 8080))# 3.设置监听# 参数:最大监听个数(排队等待处理的最大个数)tcp_server_socket.listen(128)while True:# 4.阻塞等待接受客户端的连接请求# 返回值是一个元组(有两个元素)(元素1:和客户端进行通信的socket 元素2:客户端的地址信息(ip,端口号)# 通过拆包语法 我们分别获取两个元素(client_socket负责处理客户请求)client_socket, client_addr = tcp_server_socket.accept()# 创建子进程sub_process = multiprocessing.Process(target=handler_client_request, args=(client_socket,))# 开启子进程sub_process.start()# 关闭客户端套接字client_socket.close()tcp_client_socket.close()if __name__ == '__main__':
六、原理解析图
TCP客户端与服务端相关推荐
- linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现
1 TCP简介 tcp是一种基于流的应用层协议,其"可靠的数据传输"实现的原理就是,"拥塞控制"的滑动窗口机制,该机制包含的算法主要有"慢启动&quo ...
- TCP客户端与服务端开发
** TCP客户端与服务端开发 ** 客户端 import socket# 创建客户端套接字对象 # 超数1 :iPv4(ip协议版本) # 参数2:选择协议(socket.SOCK_STREAM== ...
- Esp8266学习之旅⑧ 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。(带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- java基础—网络编程——TCP客户端与服务端交互
import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import ja ...
- 简易TCP客户端和服务端的实现
文章目录 1 客户端的实现 2 服务端的实现 1 客户端的实现 用Socket API建立简易TCP客户端: 建立一个socket. 连接服务器 connect. 接收服务器信息 recv. 关闭so ...
- Go tcp客户端、服务端编程
内容参考net包,net包提供了可移植的网络I/O接口,包括TCP/IP.UDP.域名解析和Unix域socket. 虽然本包提供了对网络原语的访问,大部分使用者只需要Dial.Listen和Acce ...
- TCP客户端、服务端程序开发
套接字类似于通讯工具 # 客户端 import socketif __name__ == '__main__':# 1.创建客户端套接字对象tcp_client_socket = socket.soc ...
- QTcpSocket客户端和服务端发送图片(或大文件)小Demo
先看一下效果: 思路: 发图片.大文件与发短字符不大一样. 1.文件和图片通过TCP可能一次发不过去,可能要发很多次.所以我们在发送文件.数据.以及文字最好带上文件的大小. 2.图片转换成文件流的形式 ...
- 【Socket网络编程】4.tcp和udp的客户端和服务端收发流程
tcp和udp的客户端和服务端收发流程 1.udp服务器流程: 1.创建serverSocket 2.设置服务器地址 serverAddr 3.将serverSocket和serverAddr绑定 b ...
- 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信
文章目录 socket介绍 java中使用socket 基于tcp的socket通信 使用ServerSocket类创建一个web服务器:(java) windows下的基于tcp的socket编程( ...
最新文章
- Ubuntu下载连接(阿里云镜像)
- [python] 常用正则表达式爬取网页信息及分析HTML标签总结
- 多线程爬虫工作流程图 to 子年
- 康宁玻璃ct值计算公式_防眩光玻璃的硬度及强度
- C++中二维数组的动态分配
- [量化学院]机器学习有哪些常用算法
- 服务器系统怎么添加网络打印机,如何添加网络打印机
- datax运行无法加载主类
- upgrade-insecure-requests
- 京东上位2018年财富中国500强民企第一席 首次实现全年盈利
- Android——广播
- Chrome浏览器通过EasyPlayer播放多路flv视频流后浏览器崩溃是什么原因?
- XPO学习(6)----实现一个简单的留言薄(ASP.NET)
- 计算机奇数页打印怎么设置,EXCEL怎么设置奇数页打印和偶数页打印
- 这是关于淘宝的一条重磅消息
- 计算机多种形状我来画教案,小学电脑画图——曲线-教案(6页)-原创力文档
- 基于Python语言的PUBG游戏数据可视化分析系统
- 错误释放结构体中数组的指针导致的AddressSanitizer: attempting free on address which was not malloc()问题
- 2022年高压电工理论题库及答案
- MySQLdb._exceptions.OperationalError: (1050, “Table ‘django_content_type‘ already exists“)