python+soket实现 TCP 协议的客户/服务端中文(自动回复)聊天程序

简介: 【吐槽】 网上的代码害死人,看着都写的言之凿凿,可运行就是有问题。 有些爱好代码、喜欢收藏代码的朋友,看到别人的代码就粘贴复制过来。可是起码你也试试运行看啊大哥   【正文】 昨日修改运行了UDP协议的C/S聊天程序,可是TCP协议的怎么都不行。

 

【吐槽】

网上的代码害死人,看着都写的言之凿凿,可运行就是有问题。

有些爱好代码、喜欢收藏代码的朋友,看到别人的代码就粘贴复制过来。可是起码你也试试运行看啊大哥

 

【正文】

昨日修改运行了UDP协议的C/S聊天程序,可是TCP协议的怎么都不行。各种试,各种坑。

做了下面几个修改后,终于可以了:

1、对发送、接收的信息,分别进行编码和解码

2、客户端的第13行bind改为connect(这真是个大坑!!

(本文基于windows 7 + python 3.4)

 

完整代码如下(人头担保,本人亲测正常!):

 1 # tcp_server.py
 2 '''服务器'''
 3 
 4 from socket import *
 5 from time import ctime
 6 
 7 HOST = '' #主机地址
 8 PORT = 23345 #端口号
 9 BUFSIZ = 2048 #缓存区大小,单位是字节,这里设定了2K的缓冲区
10 ADDR = (HOST, PORT) #链接地址
11 
12 tcpSerSock = socket(AF_INET, SOCK_STREAM) #创建一个TCP套接字
13 tcpSerSock.bind(ADDR) #绑定地址
14 tcpSerSock.listen(5) #最大连接数为5
15 
16 while True: #无限循环
17     print('尝试连接客户端。。。')
18     tcpCliSock, addr = tcpSerSock.accept() #等待接受连接
19     print('链接成功,客户端地址为:', addr)
20     
21     while True:
22         data = tcpCliSock.recv(BUFSIZ) #接收数据,BUFSIZ是缓存区大小
23         if not data: break #如果data为空,则跳出循环
24         print(data.decode())
25 
26         msg = '{} 服务器已接收 [自动回复]'.format(ctime())
27         tcpCliSock.send(msg.encode())
28         
29     tcpCliSock.close() #关闭连接
30 
31 tcpSerSock.close() #关闭服务器

 

 

 1 # tcp_client.py
 2 '''客户端'''
 3 
 4 from socket import *
 5 from time import ctime
 6 
 7 HOST = 'localhost' #主机地址
 8 PORT = 23345 #端口号
 9 BUFSIZ = 2048 #缓存区大小,单位是字节,这里设定了2K的缓冲区
10 ADDR = (HOST, PORT) #链接地址
11 
12 tcpCliSock = socket(AF_INET, SOCK_STREAM) #创建一个TCP套接字
13 #tcpCliSock.bind(ADDR) #绑定地址
14 tcpCliSock.connect(ADDR) #绑定地址
15 
16 while True:
17     msg = input('请输入:') #输入数据
18     if not msg: break #如果 msg 为空,则跳出循环
19     tcpCliSock.send(msg.encode())
20     
21     data = tcpCliSock.recv(BUFSIZ) #接收数据,BUFSIZ是缓存区大小
22     if not data: break #如果data为空,则跳出循环
23     print(data.decode())

 

【运行截图】

实验方法:先运行服务器端,然后运行客户端

 

然后就可以在客户端自由的与服务器端聊天了:

 

目录
相关文章
|
网络协议 Python
154 python网络编程 - TCP案例(模拟QQ聊天)
154 python网络编程 - TCP案例(模拟QQ聊天)
74 0
|
24天前
|
API 网络安全
发送UDP数据免费API接口教程
此API用于向指定主机发送UDP数据,支持POST或GET请求。需提供用户ID、密钥、接收IP及端口、数据内容等参数。返回状态码和信息提示。示例中含公共ID与KEY,建议使用个人凭证以提高调用频率。
44 13
|
24天前
|
网络协议 API 网络安全
发送TCP数据免费API接口教程
此API用于向指定主机发送TCP数据,支持POST/GET请求,需提供用户ID、KEY、接收IP、端口及数据内容。返回状态码和信息提示,示例如下:{"code":200,"msg":"发送成功!"}。详情见:https://www.apihz.cn/api/datacstcp.html
35 11
|
5月前
|
存储 网络协议 Ubuntu
【Linux开发实战指南】基于UDP协议的即时聊天室:快速构建登陆、聊天与退出功能
UDP 是一种无连接的、不可靠的传输层协议,位于IP协议之上。它提供了最基本的数据传输服务,不保证数据包的顺序、可靠到达或无重复。与TCP(传输控制协议)相比,UDP具有较低的传输延迟,因为省去了建立连接和确认接收等过程,适用于对实时性要求较高、但能容忍一定数据丢失的场景,如在线视频、语音通话、DNS查询等。 链表 链表是一种动态数据结构,用于存储一系列元素(节点),每个节点包含数据字段和指向下一个节点的引用(指针)。链表分为单向链表、双向链表和循环链表等类型。与数组相比,链表在插入和删除操作上更为高效,因为它不需要移动元素,只需修改节点间的指针即可。但访问链表中的元素不如数组直接,通常需要从
300 2
|
4月前
|
网络协议 Python
Python基于TCP实现聊天功能
Python基于TCP实现聊天功能
44 3
|
5月前
|
网络协议 网络架构
【网络编程入门】TCP与UDP通信实战:从零构建服务器与客户端对话(附简易源码,新手友好!)
在了解他们之前我们首先要知道网络模型,它分为两种,一种是OSI,一种是TCP/IP,当然他们的模型图是不同的,如下
220 1
|
7月前
|
网络协议 Python
在python中利用TCP协议编写简单网络通信程序,要求服务器端和客户端进行信息互传。 - 蓝易云
在这个示例中,服务器端创建一个socket并监听本地的12345端口。当客户端连接后,服务器发送一条欢迎消息,然后关闭连接。客户端创建一个socket,连接到服务器,接收消息,然后关闭连接。
105 0
|
移动开发 监控 网络协议
基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
|
网络协议
TCP 通信流程详解(附有案例代码)
TCP 通信流程详解(附有案例代码)