流程如下:

"""tcp服务端创建流程
1. 创建服务端的tcp socket : server_socket 用于监听客户端的请求
2. 绑定端口
3. server_socket开启监听,由主动连接模式变为被动接受模式
4. 等待接收客户端的请求, 一有连接,则立即响应,且创建一个与客户端对接的socket,用该socket与客户端通信
5. 使用新创建的socket与客户端通信
6. 关闭新创建的socket, 该socket关闭,则与当前客户端结束通信
7. server_socket关闭,则不再接收新的客户端请求
"""

代码如下:

 from socket import *

 def main():
# .创建tcp_server_socket 套接字对象,用于监听客户端的请求
tcp_server_socket = socket(AF_INET,SOCK_STREAM) # 复用同一个端口而不会提示端口被占用 ,解决当关闭的socket当处于time_out状态时, 也可立即使用端口
"""
socket.setsockopt(level,option,value) :配置socket
level:等级,对哪个等级操作(ip,tcp,udp,socket等级)
option:设置哪个选项
socket.SO_REUSEADDR: 复用地址
value: True:表示复用,False,表示不复用
"""
tcp_server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,True)
# 提示:socket.setsockopt()方法要在 socket.bind()之前设置 # .绑定端口
tcp_server_socket.bind(('',)) # . tcp_server_socket开始监听,有主动连接模式变为被动连接模式
tcp_server_socket.listen() # .等待客户端的请求,一有连接,就创建一个与客户端对接的new_socket新套接字,并且用这个新关键字与客户端联系
while True:
new_socket,client_addr = tcp_server_socket.accept()
print("新客户端连接:" ,client_addr)
new_socket.send("欢迎使用".encode()) # .使用新创建的new_socket来与客户端通信
# 此处的while True为同一客户端提供多次服务
while True:
recv_data = new_socket.recv() if recv_data:
print("新消息:%s,来自:%s"%(recv_data.decode('gbk'),client_addr)) # 给客户端返回消息
new_socket.send("再见".encode()) else:
print('对方已经下线')
break # . 关闭新创建的socket, 该socket关闭,则与当前客户端结束通信
new_socket.close() # .server_socket关闭,则不再接收新的客户端请求
tcp_server_socket.close() if __name__ == '__main__':
main()

结果如下:

小结:

   最简单的 流程就是不要两个while True, 这样的服务器相当于10086一天只服务一个人后就下班

  1.加第一个while True 实现了一天可以服务很多人,但是一次只能服务一个人,而且这个人只能说一句话后即退出服务,继续接收下个客户"""
  2.第二个while True 实现了客服可以说多句话,但是依旧不能一次性接入多个客户(需要用到多任务)

如果你和我有共同爱好,我们可以加个好友一起交流!

python编程系列---tcp服务端的简单实现的更多相关文章

  1. python网络编程-TCP服务端的开发

    #TCP服务端开发 2 #方法说明 3 """ 4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进 行绑定,表示本机的任何一个ip地址 ...

  2. python编程系列---tcp客户端的简单实现

    实现流程如下: """ TCP客户端实现流程1. 创建一个tcp 客户端对象2. 与服务端建立连接3. 通过tcp socket 收发数据4. 关闭连接 关闭tcp &q ...

  3. 03Python网络编程系列之服务端

    # 这里边是一个定义了服务端的一系列函数,是Python网络编程这本书第七章的第一个例子.# 这是供后边函数进行调用了,然后我们来进行研究网络的单线程编程,多线程编程.异步网络编程等.# 导入网络编程 ...

  4. [javaSE] 网络编程(TCP服务端客户端互访阻塞)

    客户端给服务端发送数据,服务端收到数据后,给客户端反馈数据 客户端: 获取Socket对象,new出来,构造参数:String的ip地址,int的端口号 调用Socket对象的getOutputStr ...

  5. 网络编程 — Linux TCP服务端和客户端

    1. 服务端 #include <stdlib.h> #include <string.h> #include <errno.h> #include <sig ...

  6. 网络编程 — Windows TCP服务端和客户端

    1. 服务端 #include <iostream> #include <signal.h> #include <forward_list> #include &l ...

  7. TCP和UDP的区别以及使用python服务端客户端简单编程

    一.TCP.UDP区别总结 1.TCP面向连接(如打电话要先拨号建立连接):UDP是无连接的,即发送数据之前不需要建立连接 2.TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不丢失 ...

  8. TCP/IP网络编程之多进程服务端(二)

    信号处理 本章接上一章TCP/IP网络编程之多进程服务端(一),在上一章中,我们介绍了进程的创建和销毁,以及如何销毁僵尸进程.前面我们讲过,waitpid是非阻塞等待子进程销毁的函数,但有一个不好的缺 ...

  9. python网络编程:socket、服务端、客户端

    本文内容: socket介绍 TCP: 服务端 客户端 UDP: 服务端 客户端 首发时间:2018-02-08 01:14 修改: 2018-03-20 :重置了布局,增加了UDP 什么是socke ...

随机推荐

  1. 20 (OC)* GCD、NSOperation、NSThread。多线程

    多线程编程技术的优缺点比较 NSThread (抽象层次:低) 优点:轻量级,简单易用,可以直接操作线程对象 缺点: 需要自己管理线程的生命周期,线程同步.线程同步对数据的加锁会有一定的系统开销. C ...

  2. .netCore+Vue 搭建的简捷开发框架 (3)-- Services层实现

    继续交作业: 上一篇作业中我们实现了 Repository仓储层的应用.并为我们的框架引入了EFCore 详见: .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使 ...

  3. jenkins自动化部署项目8 -- 新建job(服务代码部署在linux上)

    jenkins(windows) ----> 应用服务器(linux): 1.后台java服务: 与部署在windows上不同的是,这里我选择了在[构建后操作]中使用ssh向远程linux服务器 ...

  4. 品Spring:SpringBoot和Spring到底有没有本质的不同?

    现在的Spring相关开发都是基于SpringBoot的. 最后在打包时可以把所有依赖的jar包都打进去,构成一个独立的可执行的jar包.如下图13: 使用java -jar命令就可以运行这个独立的j ...

  5. Java假期样卷 简易通讯录

    score.java package score; public class score { String name; String num; int age; boolean sex; double ...

  6. 分布式session共享机制分析

    使用配置: 1.在pom文件中引入spring-session的jar包 <!--springsession--><dependency><groupId>org. ...

  7. asp.netcore 3.0 Docker Nginx(震惊,原来docker是这样的!)

    引言 Docker发布于2013年,Docker是dotCloud公司创始人在法国期间发起的一个公司内部项目,他是dotCloud多年云技术的一个革新.Docker在容器基础上进行了一步的封装,从网络 ...

  8. c3p0配置记录

    官方文档 : http://www.mchange.com/projects/c3p0/index.html <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 ...

  9. CNN之yolo目标检测算法笔记

    本文并不是详细介绍yolo工作原理以及改进发展的文章,只用做作者本人回想与提纲. 1.yolo是什么 输入一张图片,输出图片中检测到的目标和位置(目标的边框) yolo名字含义:you only lo ...

  10. 使用JavaScript·求数组的最大值和最小值

    前言  在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最大值和最小值的一些方法.   法一:其实利用 ...