python编程系列---tcp服务端的简单实现

流程如下:

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

代码如下:

 1 from socket import *
 2
 3
 4 def main():
 5     # 1.创建tcp_server_socket 套接字对象,用于监听客户端的请求
 6     tcp_server_socket = socket(AF_INET,SOCK_STREAM)
 7
 8     # 复用同一个端口而不会提示端口被占用 ,解决当关闭的socket当处于time_out状态时, 也可立即使用端口
 9     """
10         socket.setsockopt(level,option,value) :配置socket
11         level:等级,对哪个等级操作(ip,tcp,udp,socket等级)
12         option:设置哪个选项
13                 socket.SO_REUSEADDR: 复用地址
14         value: True:表示复用,False,表示不复用
15     """
16     tcp_server_socket.setsockopt(SOL_SOCKET,SO_REUSEADDR,True)
17     # 提示:socket.setsockopt()方法要在 socket.bind()之前设置
18
19     # 2.绑定端口
20     tcp_server_socket.bind((‘‘,9999))
21
22     # 3. tcp_server_socket开始监听,有主动连接模式变为被动连接模式
23     tcp_server_socket.listen(5)
24
25     # 4.等待客户端的请求,一有连接,就创建一个与客户端对接的new_socket新套接字,并且用这个新关键字与客户端联系
26     while True:
27         new_socket,client_addr = tcp_server_socket.accept()
28         print("新客户端连接:" ,client_addr)
29         new_socket.send("欢迎使用".encode())
30
31         # 5.使用新创建的new_socket来与客户端通信
32         #  此处的while True为同一客户端提供多次服务
33         while True:
34             recv_data = new_socket.recv(1024)
35
36             if recv_data:
37                 print("新消息:%s,来自:%s"%(recv_data.decode(‘gbk‘),client_addr))
38
39                 # 给客户端返回消息
40                 new_socket.send("再见".encode())
41
42             else:
43                 print(‘对方已经下线‘)
44                 break
45
46         # 6. 关闭新创建的socket, 该socket关闭,则与当前客户端结束通信
47         new_socket.close()
48
49     # 7.server_socket关闭,则不再接收新的客户端请求
50     tcp_server_socket.close()
51
52
53 if __name__ == ‘__main__‘:
54     main()

结果如下:

小结:

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

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

ps :如果有问题请在评论告诉我一下呀, 共同学习!

原文地址:https://www.cnblogs.com/ywk-1994/p/9427401.html

时间: 2024-10-18 09:16:23

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

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

客户端给服务端发送数据,服务端收到数据后,给客户端反馈数据 客户端: 获取Socket对象,new出来,构造参数:String的ip地址,int的端口号 调用Socket对象的getOutputStream()方法,获取到OutputStream对象 调用OutputStream对象的write()方法,输出流输出数据,参数:byte[]字节数组 调用Socket对象的getInputStream()方法,获取到InputStream对象 调用InputStream对象的read()方法,读取数

Unix Socket 编程:TCP服务端

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> int main(int argc,char * argv[]) { int serv_sock,clnt_sock; char msg[] = "Hello SZT !~&q

Linux socket编程入门(1)-TCP服务端

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #define DEFAULT_PORT 8000 #define MAXLINE 4096 int main(int argc, char

Python socket模块实现TCP服务端客户端

Python socket模块实现TCP服务端客户端 写了详细的注释,如果有哪一行不明白,可留言哦. 服务端脚本 # _*_ coding: utf-8 _*_ __author__ = 'xiaoke' __date__ = '2018/6/13 14:39' # 这个脚本创建一个TCP服务器,它接收来自客户端的消息,然后将消息加上时间戳前缀并返回客户端 import socket from time import ctime HOST = '' PORT = 21567 BUFSIZ = 4

python tcp服务端-客户端

tcp服务端 #!/usr/bin/python3 # -*-coding:utf-8 -*- from socket import * import time COD = 'utf-8' HOST = '0.0.0.0' # 主机ip PORT = 9999 # 端口号 BUFSIZ = 1024 ADDR = (HOST, PORT) SIZE = 10 tcpS = socket(AF_INET, SOCK_STREAM) # 创建socket对象 tcpS.setsockopt(SOL_

[C# 网络编程系列]专题十:实现简单的邮件收发器

转自:http://www.cnblogs.com/zhili/archive/2012/09/24/2689892.html 引言: 在我们的平常工作中,邮件的发送和接收应该是我们经常要使用到的功能的.因此知道电子邮件的应用程序的原理也是非常有必要的,在这一个专题中将介绍电子邮件应用程序的原理.电子邮件应用程序中涉及的协议和实现一个简答的电子邮件收发器程序. 一.邮件应用程序基本知识 1.1 电子邮件原理及相关协议 说到电子邮件的原理,其实和我们现实生活中寄邮件和寄包裹是一样的原理的.就让我们

手写一个模块化的 TCP 服务端客户端

前面的博客 基于 socket 手写一个 TCP 服务端及客户端 写过一个简单的 TCP 服务端客户端,没有对代码结构进行任何设计,仅仅是实现了相关功能,用于加深对 socket 编程的认识. 这次我们对整个代码结构进行一下优化,使其模块化,易扩展,成为一个简单意义上的“框架”. 对于 Socket 编程这类所需知识偏底层的情况(OS 协议栈的运作机制,TCP 协议的理解,多线程的理解,BIO/NIO 的理解,阻塞函数的运作原理甚至是更底层处理器的中断.网卡等外设与内核的交互.核心态与内核态的切

利用select实现IO多路复用TCP服务端

TCP服务端代码: #include <string.h> #include <stdio.h> #include <stdlib.h> #include <netinet/in.h> #include <arpa/inet.h> #include <ctype.h> #include "wrap.h" #define MAXLINE 80 #define SERV_PORT 8001 int main(int a

webservice通信 服务端 客户端简单实现

schema规范中: 1.所有标签和属性都需要有schema文件来定义. 2.所有schema文件都需要有一个唯一标识id,单在xml文件中它叫namespace. 3.namespace的值由targetNamespace属性来指定,它的值是一个url(很可能不存在). 4.如何引入一个schema约束? 1).属性?:用xmlns属性. 2).属性值?:对应schema文件的id即(namespace值). 5.如果引入的schema约束不是w3c提供的,必须指定schema文件的位置. 6