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实现聊天例子的更多相关文章

  1. Socket网络编程TCP、UDP演示样例

    Socket网络编程: 1) OSI(了解): 国际标准化组织ISO(International Orgnization for Standardization)指定了网络通信的模型:开放系统互联(O ...

  2. [网络编程] TCP、UDP区别以及TCP传输原理、拥塞避免、连接建立、连接释放总结

    TCP.UDP都是属于运输层的协议,提供端到端的进程之间的逻辑通信,而IP协议(网络层)是提供主机间的逻辑通信,应用层规定应用进程在通信时所遵循的协议.一.UDP主要特点:传输的是用户数据报协议.1. ...

  3. python 网络编程 tcp和udp 协议

    1. 网络通信协议 osi七层,tcp\ip五层 tcp\ip五层 arp协议:通过IP地址找到mac地址 2.tcp和udp的区别 tcp协议:面向连接,消息可靠,相对udp来讲,传输速度慢,消息是 ...

  4. 【Java网络编程】基于 UDP 的聊天通信

    使用 udp 协议,写一个基于命令行的聊天软件:客户端跟服务端分别在命令行启动之后,客户端和服务器端可以互相发送数据. 代码实现如下: 一.创建线程 sendThread 和 receiveThrea ...

  5. 网络编程——TCP协议、UDP协议、socket套接字、粘包问题以及解决方法

    网络编程--TCP协议.UDP协议.socket套接字.粘包问题以及解决方法 TCP协议(流式协议) ​ 当应用程序想通过TCP协议实现远程通信时,彼此之间必须先建立双向通信通道,基于该双向通道实现数 ...

  6. 32.网络编程TCP/UDP服务

    网络编程TCP: 服务器端口了解: port:0~65535 web服务:80 邮箱服务:556 0~1024:为服务默认的公认端口,一般我们不能用 套接字:socket socket作用 ip:po ...

  7. C++网络套接字编程TCP和UDP实例

    原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1.       创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1)  创建套接字(so ...

  8. 网络编程TCP协议-聊天室

    网络编程TCP协议-聊天室(客户端与服务端的交互); <span style="font-size:18px;">1.客户端发数据到服务端.</span> ...

  9. 网游中的网络编程3:在UDP上建立虚拟连接

    目录 网游中的网络编程系列1:UDP vs. TCP 网游中的网络编程2:发送和接收数据包 网游中的网络编程3:在UDP上建立虚拟连接 TODO 二.在UDP上建立虚拟连接 介绍 UDP是无连接的,一 ...

随机推荐

  1. xsl -fo 了解

    XSL-FO是用于格式化XML数据的语言,全称为Extensible Stylesheet Language Formatting Objects(格式化对象的可扩展样式表语言),是W3C参考标准,现 ...

  2. zstack(一)运行及开发环境搭建及说明(转载)

    本篇介绍zstack的部署环境,以及二次开发环境 运行环境 讲真,ZStack的安装做的还是不错的,提供多种安装模式,如离线安装.在线安装.一键安装.分布式安装等.安装的过程其实都很简单,当然这也是z ...

  3. file-loader 与 url-loader 的区别

    url-loader是对file-loader的一个封装,比如webpack中对图片的加载器配置 {test: /\.(png|jpg)$/, loader: 'url-loader?limit=81 ...

  4. 未能正确加载“VSTS for Database Professionals Sql Server Data-tier Application”包。(转)

    今天费了九牛二虎之力,重转好了vs2010之后,打开解决方案,报出下面的错误: ---------------------------Microsoft Visual Studio---------- ...

  5. golang 如何判断变量的类型

    本文介绍两种用于判断变量类型的方式. 方法一 package main import ( "fmt" ) func main() { v1 := "123456" ...

  6. C语言扩展动态内存报错:realloc(): invalid next size: 0x0000000002365010 ***

    晚上被这个内存扩展崩溃的问题折腾的有点崩溃,当答案揭晓的那一刻,恍然大悟,原来如此简单. 练习题目:输入一个字符串,根据字母进行排序,说白了就是一个简单的冒泡 #include <stdio.h ...

  7. MySQL 瓶颈及应对措施

    注:内容摘抄自<PHP 核心技术与最佳实践>一书 MySQL 是存在瓶颈的. 当 MySQL 单表数据量达到千万级别以上时,无论如何对 MySQL 进行优化,查询如何简单,MySQL 的性 ...

  8. ubuntu 16.04 忘记root密码

    虚拟机中安装的ubuntu 16.04. 方法一 如果用户具有sudo权限,那么直接可以运行如下命令: sudo su root #输入当前用户的密码 passwd #输入密码 #再次输入密码 方法二 ...

  9. bzoj4236 JOIJOI

    Description JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的名字和自己一样由 ...

  10. java web程序 登陆验证页面 4个页面人性化设置

    到这里,快期末考试了,老师不讲课,我心里有苦不想说,也许没有考虑到老师的感受,让老师难堪了 但是我的行为已不再是我可以做的了.不可能了,我只是职业性的机械的做事了. 思路: 1.第一个是form表单, ...