什么是 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()的更多相关文章

  1. 8.9.网络编程_Socket 远程调用机制

    1.网络编程 1.1.网络编程概述: 通过通信线路(有线或无线)可以把不同地理位置且相互独立的计算机连同其外部设备连接起来,组成计算机网络.在操作系统.网络管理软件及网络 通信协议的管理和协调下,可以 ...

  2. 【vc】14_网络编程_socket编程

    1.计算机网络基本知识 最简单的网络程序如图: 提示:IP地址就相当于一个公司的总机号码,端口号就相当于分机号码.在打电话时,拨通总机后,还需要转到分机上. (1)协议 ·为进行网络中的数据交换(通信 ...

  3. python_网络编程

    网络ISO(国际标准化组织)--->网络体系结构标准(OSI模型)OSI: 网络信息传输比较复杂需要很多功能协同-->将功能分开,降低耦合度,让每个模块完成一定的功能-->将这些模块 ...

  4. android网络编程_socket(一)

    转载http://www.eoeandroid.com/thread-97477-1-1.html 小知识点:UDP协议和TCP协议的不同.UDP是把数据都打成数据包,数据包上自带通信的地址,但是数据 ...

  5. Python_网络编程udp-飞秋自动攻击

    # 模拟一个接收数据import socketimport time def auto_hack(udp_socket, recv_msg, revc_ip, revc_port=2425): # 发 ...

  6. python_网络编程_基础

    基本的架构有C/S架构 和B/S架构 B/S架构优于C/S架构? 因为统一入口 , 都是从浏览器开始访问 两台电脑实现通信, 需要网卡, 网卡上有全球唯一的mac地址 ARP协议 #通过ip地址就能找 ...

  7. python_网络编程socketserver模块实现多用户通信

    服务端: import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): #在这个函数里面 ...

  8. python_网络编程hmac模块验证客户端的合法性

    hmac模块: 比较两个函数的密钥是否一致: import hmac import os msg = os.urandom(32) #生成32位随机字节码 def wdc(): key = b'wdc ...

  9. python_网络编程struct模块解决黏包问题

    为什么会出现黏包现象: 首先只有在TCP协议中才会出现黏包现象,是因为TCP协议是面向流的协议,在发送的数据传输的过程中还有缓存机制来避免数据丢失,因此,在连续发送小数据的时候,以及接收大小不符的时候 ...

随机推荐

  1. 【最短路】HDU 1688 Sightseeing

    题目大意 给出一个有向图(可能存在重边),求从\(S\)到\(F\)最短路的条数,如果次短路的长度仅比最短路的长度多1,那么再加上次短路的条数. 输入格式 第一行是数据组数\(T\). 对于魅族数据, ...

  2. 这是2020年最强Python学习路线,从入门到精通!

    给大家整理的这套python学习路线图,按照此教程一步步的学习来,肯定会对python有更深刻的认识.或许可以喜欢上python这个易学,精简,开源的语言.全民学Python的话题铺天盖地,中国的Py ...

  3. deployer服务器端的配置

    虽然说是无侵入的部署工具,但是还是需要我们来做一些微小的配置的,因为出于安全考虑,我们一般不会开发 root 用户的 SSH 登录,而是使用其它用户,比如 Ubuntu 默认的 ubuntu 用户.我 ...

  4. Stream(二)

    public class Test { /* * Stream接口: * 实现类 * IntStream * DoubleStream * LongStream * * 一.创建Stream * 1. ...

  5. Scala 特殊符号含义

    date: 2019-08-01 11:15:27 updated: 2019-08-22 15:22:32 Scala 特殊符号含义 参考地址 1. ::: :::(三个冒号)只用于连接两个 Lis ...

  6. java程序练习:输入数字转换成中文输出(金额相关)

    //题目,做一个输入金额数字,输出转换成中文的金额名称.public class Test { public static void main(String[] args) { System.out. ...

  7. 学习写简单的RPC框架demo

    学习实现一个简单的RPC框架. 工程主要目录分级结构: rpc-common: 公共基础包,能力提供包 rpc-provider: 服务提供者 rpc-consumer:服务消费者 rpc-servi ...

  8. Java学习的第三十二天

    1. 2.综合例题没太看懂 3.明天复习第十二章

  9. 【Flutter 混合开发】添加 Flutter 到 iOS

    Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...

  10. Redis的介绍及使用

    redis 简介 简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向.另外,redis 也经常 ...