简介

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客户端与服务端相关推荐

  1. linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现

    1 TCP简介 tcp是一种基于流的应用层协议,其"可靠的数据传输"实现的原理就是,"拥塞控制"的滑动窗口机制,该机制包含的算法主要有"慢启动&quo ...

  2. TCP客户端与服务端开发

    ** TCP客户端与服务端开发 ** 客户端 import socket# 创建客户端套接字对象 # 超数1 :iPv4(ip协议版本) # 参数2:选择协议(socket.SOCK_STREAM== ...

  3. Esp8266学习之旅⑧ 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。(带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  4. java基础—网络编程——TCP客户端与服务端交互

    import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import ja ...

  5. 简易TCP客户端和服务端的实现

    文章目录 1 客户端的实现 2 服务端的实现 1 客户端的实现 用Socket API建立简易TCP客户端: 建立一个socket. 连接服务器 connect. 接收服务器信息 recv. 关闭so ...

  6. Go tcp客户端、服务端编程

    内容参考net包,net包提供了可移植的网络I/O接口,包括TCP/IP.UDP.域名解析和Unix域socket. 虽然本包提供了对网络原语的访问,大部分使用者只需要Dial.Listen和Acce ...

  7. TCP客户端、服务端程序开发

    套接字类似于通讯工具 # 客户端 import socketif __name__ == '__main__':# 1.创建客户端套接字对象tcp_client_socket = socket.soc ...

  8. QTcpSocket客户端和服务端发送图片(或大文件)小Demo

    先看一下效果: 思路: 发图片.大文件与发短字符不大一样. 1.文件和图片通过TCP可能一次发不过去,可能要发很多次.所以我们在发送文件.数据.以及文字最好带上文件的大小. 2.图片转换成文件流的形式 ...

  9. 【Socket网络编程】4.tcp和udp的客户端和服务端收发流程

    tcp和udp的客户端和服务端收发流程 1.udp服务器流程: 1.创建serverSocket 2.设置服务器地址 serverAddr 3.将serverSocket和serverAddr绑定 b ...

  10. 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信

    文章目录 socket介绍 java中使用socket 基于tcp的socket通信 使用ServerSocket类创建一个web服务器:(java) windows下的基于tcp的socket编程( ...

最新文章

  1. Ubuntu下载连接(阿里云镜像)
  2. [python] 常用正则表达式爬取网页信息及分析HTML标签总结
  3. 多线程爬虫工作流程图 to 子年
  4. 康宁玻璃ct值计算公式_防眩光玻璃的硬度及强度
  5. C++中二维数组的动态分配
  6. [量化学院]机器学习有哪些常用算法
  7. 服务器系统怎么添加网络打印机,如何添加网络打印机
  8. datax运行无法加载主类
  9. upgrade-insecure-requests
  10. 京东上位2018年财富中国500强民企第一席 首次实现全年盈利
  11. Android——广播
  12. Chrome浏览器通过EasyPlayer播放多路flv视频流后浏览器崩溃是什么原因?
  13. XPO学习(6)----实现一个简单的留言薄(ASP.NET)
  14. 计算机奇数页打印怎么设置,EXCEL怎么设置奇数页打印和偶数页打印
  15. 这是关于淘宝的一条重磅消息
  16. 计算机多种形状我来画教案,小学电脑画图——曲线-教案(6页)-原创力文档
  17. 基于Python语言的PUBG游戏数据可视化分析系统
  18. 错误释放结构体中数组的指针导致的AddressSanitizer: attempting free on address which was not malloc()问题
  19. 2022年高压电工理论题库及答案
  20. MySQLdb._exceptions.OperationalError: (1050, “Table ‘django_content_type‘ already exists“)

热门文章

  1. 【JSP】EL表达式和JSTL
  2. rbf神经网络参数设置_基于梯度下降法的RBF神经网络逼近(03)
  3. 三维软件Skyline开发初步
  4. 3分钟了解LCD1602液晶显示屏的使用
  5. vue 使用vue-print-nb 实现打印功能 和 用针式打印机打印模糊问题
  6. Android contacts 的详解
  7. WAPI安全协议检测系统测试分析
  8. 软件测试培训班 软件测试0基础到项目实战
  9. 关于QSS 看这一篇就够了!
  10. 咸鱼CAD笔记—CAD基础操作