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协议是面向流的协议,在发送的数据传输的过程中还有缓存机制来避免数据丢失,因此,在连续发送小数据的时候,以及接收大小不符的时候 ...
随机推荐
- 【最短路】HDU 1688 Sightseeing
题目大意 给出一个有向图(可能存在重边),求从\(S\)到\(F\)最短路的条数,如果次短路的长度仅比最短路的长度多1,那么再加上次短路的条数. 输入格式 第一行是数据组数\(T\). 对于魅族数据, ...
- ORACLE结构化查询语句
- docker启动服务---------------mysql
1.查找镜像: docker search mysql 也可以去官网查看镜像tag,选择自己需要的版本,否则会下载最新版本:https://hub.docker.com/_/mysql/ 2.下载镜像 ...
- elasticsearch-安装-centos7- es7.5 搭建
centos6 搭建 参考 https://www.cnblogs.com/php-linux/p/8758788.html 搭建linux虚拟机 https://www.cnblogs ...
- spring boot:用redis+lua限制短信验证码的发送频率(spring boot 2.3.2)
一,为什么要限制短信验证码的发送频率? 1,短信验证码每条短信都有成本制约, 肯定不能被刷接口的乱发 而且接口被刷会影响到用户的体验, 影响服务端的正常访问, 所以既使有图形验证码等的保护, 我们仍然 ...
- ImageMagick:用identify检查图片是否完整?(jpg/gif/png图片是否损坏)
一,常用图片格式的结束标志是什么? 1,Jpg格式的文件在16进制中的表示是以 ff d9 两个字节结尾 2, gif格式的文件,结尾是 3b 3, png格式的文件,结尾是 00 00 00 ...
- matplotlib 饼状图
import matplotlib.pyplot as plt import matplotlib as mpl # 支持中文 plt.rcParams['font.sans-serif'] = [' ...
- 修改apt,pip,npm为国内镜像源
apt 原文件备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 编辑源列表文件 sudo vim /etc/apt/sources. ...
- 5G-第五代移动通信系统(5th generation mobile/wireless/cellular system)
通信系统 有意义的信息交流被称为通讯. 自然界:狼嚎.狗叫.虫鸣.鸡叫. 人类社会:说话.眼神.写信.烽火台. 目的:信息的传递. 人类发明电以后,开始使用电来传递信息,特别快. 于是有了电报.电话以 ...
- pv操作是否会造成死锁呢?
看了一些pv操作的例子,有一些基本原理不是想得很清楚. 有一个进程 while(true) { p(s); ...... v(s); } s的初值为1. 那么我的问题是,当多个该进程需要执行时,是否会 ...