22 网络编程--TCP和UDP实现聊天例子
1、TCP简单的一次对话,单通信
客户端:
import socket
HOST = 'localhost'
PORT = 50006
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect((HOST,PORT))
client.sendall(b'hello,python')
data = client.recv(1024)
print('Received',data)
服务端:
import socket
HOST = ''
PORT = 50006
sock_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock_server.bind((HOST,PORT))
sock_server.listen(1)
conn,addr = sock_server.accept() while True:
data =conn.recv(1024)
if not data:break
conn.send(data)
2、循环收发数据,单通信(TCP)
客户端:
import socket
HOST = 'localhost'
PORT = 50006
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect((HOST,PORT))
while True:
cmd = input('>>').strip()
if not cmd:break client.send(cmd.encode('utf-8'))
data = client.recv(1024)
print('Received',data.decode('utf-8'))
服务端:
import socket
HOST = ''
PORT = 50006
sock_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock_server.bind((HOST,PORT))
sock_server.listen(1)
conn,addr = sock_server.accept() while True:
data =conn.recv(1024)
if not data:break
conn.send(data)
3、双方都说话(TCP)
客户端:
import socket
HOST = 'localhost'
PORT = 50000
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect((HOST,PORT))
while True:
cmd = input('>>').strip()
if not cmd:break
client.send(cmd.encode('utf-8')) data = client.recv(1024)
print('Received',data.decode('utf-8'))
服务端:
import socket
HOST = ''
PORT = 50000
sock_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock_server.bind((HOST,PORT))
sock_server.listen(1) while True:
conn, addr = sock_server.accept()
while True:
data =conn.recv(1024)
print(f"收到客户端的的数据:>{data.decode('utf-8')}")
if not data:break
response = input('回复客户端>>').strip()
conn.send(response.encode('utf-8'))
4、基于UDP协议实现
客户端:
import socket
ip_port = ('127.0.0.1',9000)
BUFSIZE = 1024
udp_client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while True:
MSG = input('>>').strip()
udp_client.sendto(MSG.encode('utf-8'),ip_port)
back_msg,addr = udp_client.recvfrom(BUFSIZE)
print(back_msg.decode('utf-8'))
服务端:
import socket
ip_socket =('127.0.0.1',9000)
BUFSIZE = 1024
udp_server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udp_server.bind((ip_socket)) while True:
msg,addr = udp_server.recvfrom(BUFSIZE)
print(msg.decode('utf-8'),addr) response = input('>>').strip()
udp_server.sendto(response.encode('utf-8'),addr)
22 网络编程--TCP和UDP实现聊天例子的更多相关文章
- Socket网络编程TCP、UDP演示样例
Socket网络编程: 1) OSI(了解): 国际标准化组织ISO(International Orgnization for Standardization)指定了网络通信的模型:开放系统互联(O ...
- [网络编程] TCP、UDP区别以及TCP传输原理、拥塞避免、连接建立、连接释放总结
TCP.UDP都是属于运输层的协议,提供端到端的进程之间的逻辑通信,而IP协议(网络层)是提供主机间的逻辑通信,应用层规定应用进程在通信时所遵循的协议.一.UDP主要特点:传输的是用户数据报协议.1. ...
- python 网络编程 tcp和udp 协议
1. 网络通信协议 osi七层,tcp\ip五层 tcp\ip五层 arp协议:通过IP地址找到mac地址 2.tcp和udp的区别 tcp协议:面向连接,消息可靠,相对udp来讲,传输速度慢,消息是 ...
- 【Java网络编程】基于 UDP 的聊天通信
使用 udp 协议,写一个基于命令行的聊天软件:客户端跟服务端分别在命令行启动之后,客户端和服务器端可以互相发送数据. 代码实现如下: 一.创建线程 sendThread 和 receiveThrea ...
- 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法
网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...
- 32.网络编程TCP/UDP服务
网络编程TCP: 服务器端口了解: port:0~65535 web服务:80 邮箱服务:556 0~1024:为服务默认的公认端口,一般我们不能用 套接字:socket socket作用 ip:po ...
- C++网络套接字编程TCP和UDP实例
原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1. 创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1) 创建套接字(so ...
- 网络编程TCP协议-聊天室
网络编程TCP协议-聊天室(客户端与服务端的交互); <span style="font-size:18px;">1.客户端发数据到服务端.</span> ...
- 网游中的网络编程3:在UDP上建立虚拟连接
目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网络编程3:在UDP上建立虚拟连接 TODO 二.在UDP上建立虚拟连接 介绍 UDP是无连接的,一 ...
随机推荐
- php登陆绑定手机验证码使用阿里大于接口
https://doc.alidayu.com/doc2/index.htm 一条0.045 元 新注册送10块
- seleniumWebdriver浏览器驱动信息汇总
selenium是thoughtworks公司开发的一款开源的测试工具,主要用来做web端的自动化测试. Python安装selenium,直接使用执行pip install selenium(pyt ...
- 小米盒子root及sshdroid安装
1.root 参考屌丝猫的教程 主要原理是通过运行自定义recovery实现root功能 2.安装sshdroid以及幸运破解器 3.使用幸运破解器吧sshdroid编程系统应用,从而实现自启动
- oracle之 变更OS时间对数据库的影响
本文:说明提供了操作系统日期变更对数据库.应用程序数据和作业的影响. 1.它将会影响插入的任何记录,如果涉及到sysdate,则更改日期.2.它还会影响在那个日期运行的任何调度器作业. 如果将系统时间 ...
- es6比es5节省代码的地方总结
对象方法简写: es5写法: var obj = { name: 'jeff', getName: function () { return this.name; } } es6写法(方法定义里,少写 ...
- HBase的BlockCache
BlockCache 首先要明白Block,在HBase里面存储的最小单元:在memstore向硬盘刷的时候,如果目标block的大小+size之后大于MAX_SIZE,将会新创建一个block来存储 ...
- Input输入控制
1.Input只能输入正整数 <html> <head> <title>只能输入正整数</title> </head> <body&g ...
- Unity3D NGUI Sprite精灵动画
NGUI 2.6.1下载: part1 part2 NGUI 实现Sprite精灵动画很简单: 1.先制作图像集合.打开NGUI菜单下Atlas Maker,选中切好的图片,点击Add/Update按 ...
- [C#]反射遍历对象属性
/// <summary> /// C#反射遍历对象属性 /// </summary> /// <typeparam name="T">对象类型 ...
- 廖雪峰Java1-2程序基础-5浮点数运算
1.浮点数运算的特点 很多浮点数无法精确表示 计算有误差 整型可以自动提升到浮点型 如0.1用二进制表示会是一个无限循环的小数.计算机不可能在有限内存中表示一个无限小数.因此浮点数不能精确表示.也造成 ...