什么是 Socket?

Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

详细资料查看菜鸟教程http://www.runoob.com/python3/python3-socket.html

案例1 - 实现连接:

1.1服务端

  1. # -*- coding: UTF-8 -*-
  2. # Filename : Python_网络编程_服务器端.py
  3.  
  4. #引入模块
  5. import socket,sys
  6.  
  7. #创建socket对象
  8. serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #socket内的两个参数分别是:IPV4、TCP
  9.  
  10. # 获取本地主机名
  11. host = socket.gethostname()
  12. port = 9999 #注:这里是自定义的,尽量不要用4000以内的端口
  13.  
  14. # 绑定端口
  15. serversocket.bind((host, port))
  16.  
  17. # 设置最大连接数,超过后排队
  18. serversocket.listen(5)
  19.  
  20. print("服务器已经开启,可以连接...")
  21. while True:
  22. # 建立客户端连接
  23. clientsocket,addr = serversocket.accept()
  24.  
  25. print("连接地址: %s" % str(addr))
  26.  
  27. msg='欢迎访问!'+ "\r\n"
  28. clientsocket.send(msg.encode('utf-8'))
  29. clientsocket.close()

1.2客户端

  1. # 导入 socket、sys 模块
  2. import socket
  3. import sys
  4.  
  5. # 创建 socket 对象
  6. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  7.  
  8. # 获取本地主机名
  9. host = socket.gethostname()
  10.  
  11. # 设置端口好
  12. port = 9999
  13.  
  14. # 连接服务,指定主机和端口
  15. s.connect((host, port))
  16.  
  17. # 接收小于 1024 字节的数据
  18. msg = s.recv(1024)
  19.  
  20. s.close()
  21.  
  22. print (msg.decode('utf-8'))

案例2 - 实现双向信息传递:

2.1服务器端

  1. # -*- coding:utf8 -*-
  2.  
  3. """
  4. 备注:这是服务器
  5. """
  6. import socket,sys # 导入socket模块
  7.  
  8. sk = socket.socket() # 创建socket对象
  9. sk.bind(("127.0.0.1", 8888)) # 绑定端口,“127.0.0.1”代表本机地址,8888为设置链接的端口地址
  10. sk.listen(5) # 设置监听,最多可有5个客户端进行排队
  11. print("等待客户连接中……")
  12. while True: #准备循环执行以下步骤
  13. conn, addr = sk.accept() # 阻塞状态,被动等待客户端的连接
  14. print(conn) # conn可以理解客户端的socket对象
  15. print(addr) # addr为客户端的端口地址
  16. # ('127.0.0.1', 40966)
  17. accept_data = conn.recv(1024) # conn.recv()接收客户端的内容,接收到的是bytes类型数据,通常最大是1024个字节
  18. if accept_data: #‘如果能正常接收到客户端传来数据,就...’即:不为空
  19. accept_data2 = accept_data.decode("utf-8") # str(data,encoding="utf8")用“utf8”进行解码
  20. if accept_data2=='exit': #如果客户端传来的是“exit”就执行。。。
  21. sys.exit()
  22. else:
  23. print("".join(("接收内容:", accept_data2, " 客户端口:", str(addr[1]))))
  24. send_data = input("输入发送内容:") #给客户端发送内容
  25. conn.sendall(bytes(send_data, encoding="utf8")) # 发送内容必须为bytes类型数据,bytes(data, encoding="utf8")用“utf8”格式进行编码
  26. conn.close()
  27. sys.close()

2.2客户端:

  1. # -*- coding:utf8 -*-
  2. #修改接口,和server4链接
  3. #修改为多次运行 while True
  4. '''
  5. 备注:这是客户端;当在客户端输入“exit”时服务端断开
  6. '''
  7.  
  8. import socket
  9. while True:
  10. obj = socket.socket() #注 括号内默认“socket.AF_INET,socket.SOCK_STREAM”,是IPV4 和 TCP协议
  11. obj.connect(("127.0.0.1",8888)) #声明链接方式,ip 和 端口
  12. send_data = input("输入发送内容:") #输入传输内容(字符串格式)
  13. obj.sendall(bytes(send_data, encoding="utf8")) #转换为字节码格式并发送给服务器
  14. ret = str(obj.recv(1024),encoding="utf-8") #接收到(服务器传来的)字节码格式的内容,转为字符串格式
  15. 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. xuexi0.1

    1.C语言通过编译器对内存进行了一定的封装.a +=4等效于a=a+4.C语言中数据类型的本质含义:表示一个内存格子的长度和解析方法.(int *)0:表示0是一个指针,这个指针指向一个int类型的数 ...

  2. 【Luogu】P4381 [IOI2008]Island

    一.题目 Description 你将要游览一个有N个岛屿的公园.从每一个岛i出发,只建造一座桥.桥的长度以Li表示.公园内总共有N座桥.尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走.同时, ...

  3. kibana-安装-通过docker

      拉取镜像 docker pull kibana:7.9.1   创建用户自定义网络 docker network create esnet   运行Kibana docker run --name ...

  4. SonarQube 7.7 安装教程

    SonarQube 7.7 安装教程 一. CentOS设置 1. 更换阿里源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.ali ...

  5. STC 核心板 入门记

    写在开始 STC核心板,它的软件十分全面,想要什么都有,非常适合新手入门. 上一次电赛刚结束,现在反正也啥也不太会,干脆学个这个吧. 顺便写篇博客记录一下. 记录第一次烧写 周四下单,周六到货.中午拿 ...

  6. C2. Pokémon Army (hard version) 解析(思維)

    Codeforce 1420 C2. Pokémon Army (hard version) 解析(思維) 今天我們來看看CF1420C2 題目連結 題目 略,請直接看原題. 前言 根本想不到這個等價 ...

  7. viewpage和tablayout导航栏

    引入material库: implementation 'com.google.android.material:material:1.2.1' <?xml version="1.0& ...

  8. PHP对接微信扫码登录

    1.PC端扫码登录 如果你将微信小程序和公众账号绑定同一个微信开放平台,那么他们各自的接口返回有一个参数unionid是相同的(没有绑定微信公众账号就没有):那么你就可以使用这个unionid来做业务 ...

  9. 4G DTU的使用方法和应用领域

    4G DTU是一种数据传输单元,通俗理解就是,用来传输数据的一种硬件.既然是用来传输数据的,那就能将它视为一个管道,也就是说,指令同过它传给设备,而管道是不对这些指令做出响应的. 4G DTU如何使用 ...

  10. 测试TwemProxy的应知应会

    一.背景 最近中间件开发组对twemproxy的发现注册机制做了改造,之前没有接触过twemproxy,借这次测试的机会,初步学习了一下twemproxy相关的知识:下面用"测试语言&quo ...