当前位置: 首页 > news >正文

Socket网络编程实例2

两个程序通过“网络”交互数据就使用socket,它只负责两件事:建立连接,传递数据。

所有的数据传输接收,必须都使用byte格式

 

1.简单实例:

#客户端
import socket

client=socket.socket()
client.connect(("localhost",6969))
client.send(b"Hello World")
data_receive=client.recv(1024)
print("接收到的数据是:",data_receive)
client.close()

 

#服务器端
import socket

server=socket.socket()
server.bind(("localhost",6969))
server.listen()
print("我要开始监听了")
conn,port=server.accept()
print("电话来了")
data=conn.recv(1024)
print("收到的数据是:",data)
conn.send(data.upper())
print("返回的数据是:",data.upper())
server.close()

 运行结果:客户端

接收到的数据是: b'HELLO WORLD'

  运行结果:服务器端

我要开始监听了
电话来了
收到的数据是: b'Hello World'
返回的数据是: b'HELLO WORLD'

 2.实例2传中文:

#客户端
import socket

client=socket.socket()
client.connect(("localhost",6969))
client.send("我要开始下载电影了a".encode("utf-8"))
data_receive=client.recv(1024)
print("接收到的数据是:",data_receive.decode("utf-8"))
client.close()

 

#服务器端
import socket

server=socket.socket()
server.bind(("localhost",6969))
server.listen()
print("我要开始监听了")
conn,port=server.accept()
print("电话来了")
data=conn.recv(1024)
print("收到的数据是:",data.decode("utf-8"))
conn.send(data.upper())
server.close()

 

1 我要开始监听了
2 电话来了
3 收到的数据是: 我要开始下载电影了a
接收到的数据是: 我要开始下载电影了A

 3.实例-与一个客户端不停地通话,用到 while循环:

#客户端(发出去的内容是小写的,收到的回应是大写的。)
import socket
client=socket.socket()
#声明socket类型,同时生成socket连接对象;定义地址簇和协议类型(默认IPV4和TCP/IP)
client.connect(("localhost",6969)) #连接本机的6969端口
while True:
    msg=input("请输入你的请求信息>>:")
    client.send(msg.encode("utf-8"))
    data=client.recv(1024) #1024个字节,接受服务器端的返回,recv默认是阻塞的。客户端一断开,conn.recv收到的就都是空数据。会陷入死循环。
    print("recv:",data.decode())
client.close()

 

#服务器端
import socket
server=socket.socket()
server.bind(('localhost',6969)) #绑定要监听的端口
server.listen() #监听
print("我要开始等电话了")
conn,addr=server.accept()
print(conn,addr) #就是客户端连过来而在服务器端为其生成的一个连接实例。
print("电话来了")
while True:
    data=conn.recv(1024)
    print("recv:",data)
    #conn.send("我是服务器端来的确认信息".encode("utf-8"))
    conn.send(data.upper())
server.close()

 

请输入你的请求信息>>:1
recv: 1
请输入你的请求信息>>:2
recv: 2
请输入你的请求信息>>:3
recv: 3
请输入你的请求信息>>:4
recv: 4
请输入你的请求信息>>:
我要开始等电话了
<socket.socket fd=288, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 6969), raddr=('127.0.0.1', 49602)> ('127.0.0.1', 49602)
电话来了
recv: b'1'
recv: b'2'
recv: b'3'
recv: b'4'

 4.实例-一个客户通话结束后,第二个客户接进来:

#客户端(发出去的内容是小写的,收到的回应是大写的。)
import socket
client=socket.socket()
#声明socket类型,同时生成socket连接对象;定义地址簇和协议类型(默认IPV4和TCP/IP)
client.connect(("localhost",6969)) #连接本机的6969端口
while True:
    msg=input("请输入你的请求信息>>:").strip()
    if len(msg)==0:
        continue
    client.send(msg.encode("utf-8"))
    data=client.recv(1024) #1024个字节,接受服务器端的返回
    print("recv:",data.decode())
client.close()

 

#服务器端
import socket
server=socket.socket()
server.bind(('localhost',6969)) #绑定要监听的端口
server.listen() #监听
print("我要开始等电话了")
while True:
    conn,addr=server.accept()
    print(conn,addr) #就是客户端连过来而在服务器端为其生成的一个连接实例。
    print("电话来了")
    while True:
        data=conn.recv(1024)
        print("recv:",data)
        conn.send("我是服务器端来的确认信息".encode("utf-8"))
        if not data:
            print("Client has lost...")
            break
        conn.send(data.upper())
server.close()

 

转载于:https://www.cnblogs.com/momo8238/p/7272519.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Oracle查询锁表和解锁
  • Spring学习笔记——Spring依赖注入原理分析
  • 这本将shell的书应该不错
  • System.Web.UI.Page
  • TensorFlow 101 | 原理与概念
  • Apache POI
  • [转]Spring Boot应用的后台运行配置
  • 博客第五天
  • 百度知道芝麻将,申请资格权限介绍奖惩制度(简剖)
  • Android真机调试访问本地服务器(localhost)的解决方案
  • matplotlib之scatter绘制散点
  • IBM 存储高可用HA解决方案和DR连续性解决方案
  • [luoguP2401] 不等数列
  • vitamio遇到的坑,都是不能播放
  • Java使用POI导出excel(上)——基本操作
  • 分享一款快速APP功能测试工具
  • ➹使用webpack配置多页面应用(MPA)
  • Bytom交易说明(账户管理模式)
  • CentOS6 编译安装 redis-3.2.3
  • ES6核心特性
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • js写一个简单的选项卡
  • Linux快速复制或删除大量小文件
  • mysql外键的使用
  • Python学习之路13-记分
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 阿里云Kubernetes容器服务上体验Knative
  • 你真的知道 == 和 equals 的区别吗?
  • 线上 python http server profile 实践
  • 一个SAP顾问在美国的这些年
  • 一些css基础学习笔记
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​Java基础复习笔记 第16章:网络编程
  • ​linux启动进程的方式
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • $GOPATH/go.mod exists but should not goland
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (10)STL算法之搜索(二) 二分查找
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (C++17) optional的使用
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (黑马点评)二、短信登录功能实现
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)树状数组
  • **PHP分步表单提交思路(分页表单提交)
  • .cfg\.dat\.mak(持续补充)
  • .dwp和.webpart的区别
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 4.0中的泛型协变和反变
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证