什么是 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. 【Luogu】P3005 [USACO10DEC]槽的游戏The Trough Game

    一.题目 题目描述 农夫约翰和贝西又在玩游戏.这个游戏需要很多个槽. 农夫约翰在谷仓里藏起来了N(1<=N<=20)个槽,并且他已经把其中的一些装上了食物.贝西以"在这个表里(表 ...

  2. go 不停模拟 写日志

    package main import ( "os" "errors" "math/rand" "time" " ...

  3. Linux系统及第三方应用官方文档

    通过在线文档获取帮助 http://www.github.com https://www.kernel.org/doc/html/latest/ http://httpd.apache.org htt ...

  4. WebSocket的理解

    Websocket相对于无状态的HTTp协议,是在一次成功连接之后,在关闭请求之前,服务器和客户端能顺利进行信息传输.而不用像HTTP那样每一次都要告诉服务器这个请求者是谁(身份鉴别信息). 在HTT ...

  5. Java中的String到底占用多大的内存空间?你所了解的可能都是错误的!!

    写在前面 最近小伙伴加群时,我总是问一个问题:Java中的String类占用多大的内存空间?很多小伙伴的回答着实让我哭笑不得,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有说不知道 ...

  6. Ubuntu使用mail命令发送邮件

    sudo apt-get install mailutils   如下命令发送邮件:    mail -s "Test mail from ubuntu" ckboss@y< ...

  7. Paillier同态加密的介绍以及c++实现

    我们先来简短认识一下Paillier同态加密算法: 如果就这么按照定义来用最简朴的c++程序写 就像这样: #include <iostream> #include <math.h& ...

  8. 晚间测试13 A. Dove 打扑克 vector +模拟

    题目描述 分析 这道题比较关键的一点就是要看出最终牌数的种类数不会超过 \(\sqrt{n}\) 种 知道了这个性质我们就可以用 \(vector\) 维护一个有序的序列 \(vector\) 中存放 ...

  9. 查询时间段内所有日期(限foton)

    String dataStr = "2019-04"; try { Date date = DateUtils.parseDate(dataStr); Date startTime ...

  10. python开发基础(二)常用数据类型调用方法

    1 数字: int 2 3 int : 转换,将字符串转化成数字 4 num1 = '123' 5 num2 = int (a) 6 numadd = num2 +1000 7 print(num2) ...