基于tcp的套接字编程

一,基础版服务器端客户端(一收一发,只有一个客户端链接)

服务器端:

复制代码
 1 #Author : Kelvin
 2 #Date : 2019/1/28 22:10
 3 from socket import *
 4 server=socket.socket(AF_INET,SOCK_STREAM)
 5 server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)  #解决服务器重启时地址被占用的问题
 6 server.bind(("127.0.0.1",8888))
 7 server.listen(5)
 8 print("服务器已经启动...")
 9 conn,addr=server.accept()
10 res=conn.recv(1024).decode("utf8")
11 print("服务器:",res)
12 conn.send("服务器收到请求!".encode())
13 conn.close()
14 server.close()
复制代码

客户端:

 

复制代码
1 #Author : Kelvin
2 #Date : 2019/1/28 22:10
3 import socket
4 client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
5 client.connect(("127.0.0.1",8888))
6 client.send("客户端请求连接!".encode())
7 res=client.recv(1024).decode("utf8")
8 print("客户端:",res)
9 client.close()
复制代码

 

 

 

 

 

 

二,可交流版服务器端客户端(多收多发,只有一个客户端链接)

服务器端:

 

复制代码
 1 #Author : Kelvin
 2 #Date : 2019/1/28 22:10
 3 from socket import *
 4 server=socket.socket(AF_INET,SOCK_STREAM)
 5 server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)  #解决服务器重启时地址被占用的问题
 6 server.bind(("127.0.0.1",8888))
 7 server.listen(5)
 8 print("服务器已经启动...")
 9 conn,addr=server.accept()
10 while True:
11     res=conn.recv(1024).decode("utf8")
12     print("\033[1;36;0m服务器接收:\033[0m%s"%res)
13     con=input("回复:")
14     conn.send(con.encode())
15 conn.close()
16 server.close()
复制代码

 

客户端:

 

复制代码
 1 #Author : Kelvin
 2 #Date : 2019/1/28 22:10
 3 from socket import *
 4 client=socket.socket(AF_INET,SOCK_STREAM)
 5 client.connect(("127.0.0.1",8888))
 6 while True:
 7     con=input("回复:")
 8     client.send(con.encode())
 9     print("\033[1;36;0m客户端:\033[0m%s" %con)
10     res=client.recv(1024).decode("utf8")
11     print("\033[1;36;0m服务器端:\033[0m%s"%res)
12 client.close()
复制代码

 

 

 

三,多链接版服务器端客户端(多收多发,多个客户端链接)

服务器端:

 

复制代码
 1 #Author : Kelvin
 2 #Date : 2019/1/28 22:10
 3 from socket import *
 4 server=socket.socket(AF_INET,SOCK_STREAM)
 5 server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)  #解决服务器重启时地址被占用的问题
 6 server.bind(("127.0.0.1",8888))
 7 server.listen(5)
 8 while True:
 9     print("服务器已经启动...")
10     conn,addr=server.accept()
11     while True:
12         try:
13             res=conn.recv(1024).decode("utf8")
14             print("\033[1;36;0m服务器接收:\033[0m%s"%res)
15             con=input("回复:")
16             conn.send(con.encode())
17         except Exception:
18             break
19     conn.close()
20 server.close()
复制代码

 

客户端1:

 

复制代码
 1 #Author : Kelvin
 2 #Date : 2019/1/28 22:10
 3 import socket
 4 client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 5 client.connect(("127.0.0.1",8888))
 6 while True:
 7     con=input("回复:")
 8     client.send(con.encode())
 9     print("\033[1;36;0m客户端1:\033[0m%s" %con)
10     res=client.recv(1024).decode("utf8")
11     print("\033[1;36;0m服务器端:\033[0m%s"%res)
12 client.close()
复制代码

 

客户端2:

 

复制代码
 1 #Author : Kelvin
 2 #Date : 2019/1/28 22:10
 3 import socket
 4 client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
 5 client.connect(("127.0.0.1",8888))
 6 while True:
 7     con=input("回复:")
 8     client.send(con.encode())
 9     print("\033[1;36;0m客户端2:\033[0m%s" %con)
10     res=client.recv(1024).decode("utf8")
11     print("\033[1;36;0m服务器端:\033[0m%s"%res)
12 client.close()
复制代码

 

posted @   佛祖让我来巡山  阅读(267)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~

佛祖让我来巡山博客站 - 创建于 2018-08-15

开发工程师个人站,内容主要是网站开发方面的技术文章,大部分来自学习或工作,部分来源于网络,希望对大家有所帮助。

Bootstrap中文网

点击右上角即可分享
微信分享提示