Python_网络编程_socket()
什么是 Socket?
Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
详细资料查看菜鸟教程http://www.runoob.com/python3/python3-socket.html
案例1 - 实现连接:
1.1服务端
- # -*- coding: UTF-8 -*-
- # Filename : Python_网络编程_服务器端.py
- #引入模块
- import socket,sys
- #创建socket对象
- serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #socket内的两个参数分别是:IPV4、TCP
- # 获取本地主机名
- host = socket.gethostname()
- port = 9999 #注:这里是自定义的,尽量不要用4000以内的端口
- # 绑定端口
- serversocket.bind((host, port))
- # 设置最大连接数,超过后排队
- serversocket.listen(5)
- print("服务器已经开启,可以连接...")
- while True:
- # 建立客户端连接
- clientsocket,addr = serversocket.accept()
- print("连接地址: %s" % str(addr))
- msg='欢迎访问!'+ "\r\n"
- clientsocket.send(msg.encode('utf-8'))
- clientsocket.close()
1.2客户端
- # 导入 socket、sys 模块
- import socket
- import sys
- # 创建 socket 对象
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- # 获取本地主机名
- host = socket.gethostname()
- # 设置端口好
- port = 9999
- # 连接服务,指定主机和端口
- s.connect((host, port))
- # 接收小于 1024 字节的数据
- msg = s.recv(1024)
- s.close()
- print (msg.decode('utf-8'))
案例2 - 实现双向信息传递:
2.1服务器端
- # -*- coding:utf8 -*-
- """
- 备注:这是服务器
- """
- import socket,sys # 导入socket模块
- sk = socket.socket() # 创建socket对象
- sk.bind(("127.0.0.1", 8888)) # 绑定端口,“127.0.0.1”代表本机地址,8888为设置链接的端口地址
- sk.listen(5) # 设置监听,最多可有5个客户端进行排队
- print("等待客户连接中……")
- while True: #准备循环执行以下步骤
- conn, addr = sk.accept() # 阻塞状态,被动等待客户端的连接
- print(conn) # conn可以理解客户端的socket对象
- print(addr) # addr为客户端的端口地址
- # ('127.0.0.1', 40966)
- accept_data = conn.recv(1024) # conn.recv()接收客户端的内容,接收到的是bytes类型数据,通常最大是1024个字节
- if accept_data: #‘如果能正常接收到客户端传来数据,就...’即:不为空
- accept_data2 = accept_data.decode("utf-8") # str(data,encoding="utf8")用“utf8”进行解码
- if accept_data2=='exit': #如果客户端传来的是“exit”就执行。。。
- sys.exit()
- else:
- print("".join(("接收内容:", accept_data2, " 客户端口:", str(addr[1]))))
- send_data = input("输入发送内容:") #给客户端发送内容
- conn.sendall(bytes(send_data, encoding="utf8")) # 发送内容必须为bytes类型数据,bytes(data, encoding="utf8")用“utf8”格式进行编码
- conn.close()
- sys.close()
2.2客户端:
- # -*- coding:utf8 -*-
- #修改接口,和server4链接
- #修改为多次运行 while True
- '''
- 备注:这是客户端;当在客户端输入“exit”时服务端断开
- '''
- import socket
- while True:
- obj = socket.socket() #注 括号内默认“socket.AF_INET,socket.SOCK_STREAM”,是IPV4 和 TCP协议
- obj.connect(("127.0.0.1",8888)) #声明链接方式,ip 和 端口
- send_data = input("输入发送内容:") #输入传输内容(字符串格式)
- obj.sendall(bytes(send_data, encoding="utf8")) #转换为字节码格式并发送给服务器
- ret = str(obj.recv(1024),encoding="utf-8") #接收到(服务器传来的)字节码格式的内容,转为字符串格式
- print(ret) #输出
Python_网络编程_socket()的更多相关文章
- 8.9.网络编程_Socket 远程调用机制
1.网络编程 1.1.网络编程概述: 通过通信线路(有线或无线)可以把不同地理位置且相互独立的计算机连同其外部设备连接起来,组成计算机网络.在操作系统.网络管理软件及网络 通信协议的管理和协调下,可以 ...
- 【vc】14_网络编程_socket编程
1.计算机网络基本知识 最简单的网络程序如图: 提示:IP地址就相当于一个公司的总机号码,端口号就相当于分机号码.在打电话时,拨通总机后,还需要转到分机上. (1)协议 ·为进行网络中的数据交换(通信 ...
- python_网络编程
网络ISO(国际标准化组织)--->网络体系结构标准(OSI模型)OSI: 网络信息传输比较复杂需要很多功能协同-->将功能分开,降低耦合度,让每个模块完成一定的功能-->将这些模块 ...
- android网络编程_socket(一)
转载http://www.eoeandroid.com/thread-97477-1-1.html 小知识点:UDP协议和TCP协议的不同.UDP是把数据都打成数据包,数据包上自带通信的地址,但是数据 ...
- Python_网络编程udp-飞秋自动攻击
# 模拟一个接收数据import socketimport time def auto_hack(udp_socket, recv_msg, revc_ip, revc_port=2425): # 发 ...
- python_网络编程_基础
基本的架构有C/S架构 和B/S架构 B/S架构优于C/S架构? 因为统一入口 , 都是从浏览器开始访问 两台电脑实现通信, 需要网卡, 网卡上有全球唯一的mac地址 ARP协议 #通过ip地址就能找 ...
- python_网络编程socketserver模块实现多用户通信
服务端: import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): #在这个函数里面 ...
- python_网络编程hmac模块验证客户端的合法性
hmac模块: 比较两个函数的密钥是否一致: import hmac import os msg = os.urandom(32) #生成32位随机字节码 def wdc(): key = b'wdc ...
- python_网络编程struct模块解决黏包问题
为什么会出现黏包现象: 首先只有在TCP协议中才会出现黏包现象,是因为TCP协议是面向流的协议,在发送的数据传输的过程中还有缓存机制来避免数据丢失,因此,在连续发送小数据的时候,以及接收大小不符的时候 ...
随机推荐
- xuexi0.1
1.C语言通过编译器对内存进行了一定的封装.a +=4等效于a=a+4.C语言中数据类型的本质含义:表示一个内存格子的长度和解析方法.(int *)0:表示0是一个指针,这个指针指向一个int类型的数 ...
- 【Luogu】P4381 [IOI2008]Island
一.题目 Description 你将要游览一个有N个岛屿的公园.从每一个岛i出发,只建造一座桥.桥的长度以Li表示.公园内总共有N座桥.尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走.同时, ...
- kibana-安装-通过docker
拉取镜像 docker pull kibana:7.9.1 创建用户自定义网络 docker network create esnet 运行Kibana docker run --name ...
- SonarQube 7.7 安装教程
SonarQube 7.7 安装教程 一. CentOS设置 1. 更换阿里源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.ali ...
- STC 核心板 入门记
写在开始 STC核心板,它的软件十分全面,想要什么都有,非常适合新手入门. 上一次电赛刚结束,现在反正也啥也不太会,干脆学个这个吧. 顺便写篇博客记录一下. 记录第一次烧写 周四下单,周六到货.中午拿 ...
- C2. Pokémon Army (hard version) 解析(思維)
Codeforce 1420 C2. Pokémon Army (hard version) 解析(思維) 今天我們來看看CF1420C2 題目連結 題目 略,請直接看原題. 前言 根本想不到這個等價 ...
- viewpage和tablayout导航栏
引入material库: implementation 'com.google.android.material:material:1.2.1' <?xml version="1.0& ...
- PHP对接微信扫码登录
1.PC端扫码登录 如果你将微信小程序和公众账号绑定同一个微信开放平台,那么他们各自的接口返回有一个参数unionid是相同的(没有绑定微信公众账号就没有):那么你就可以使用这个unionid来做业务 ...
- 4G DTU的使用方法和应用领域
4G DTU是一种数据传输单元,通俗理解就是,用来传输数据的一种硬件.既然是用来传输数据的,那就能将它视为一个管道,也就是说,指令同过它传给设备,而管道是不对这些指令做出响应的. 4G DTU如何使用 ...
- 测试TwemProxy的应知应会
一.背景 最近中间件开发组对twemproxy的发现注册机制做了改造,之前没有接触过twemproxy,借这次测试的机会,初步学习了一下twemproxy相关的知识:下面用"测试语言&quo ...