我的编程空间,编程开发者的网络收藏夹
学习永远不晚

socket编程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

socket编程

1.socket编程的概念
  • socket通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过”套接字”向网络发出请求或者应答网络请求;

  • socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作;

  • 线程之间的通信形式有:event时间lock锁信号量queue队列等,而进程之间的通信,一般使用套接字,套接字的IPC方式使得跨平台之间的进程通信成为可能,最早的socket是在BSD-Unix平台上发布,最终成为了行业标准,使得计算机之间的通信变得非常简单;

# 客户端示例代码import socket# socket.AF_INET, socket.SOCK_STREAM默认参数socket_instance = socket.socket(socket.AF_INET, socket.SOCK_STREAM)socket_instance.connect(('www.baidu.com', 80))
2.socket( )类详解
  • 套接字格式:socket(family, type[,protocal])使用给定的套接字、套接字类型、协议编号(默认为0)来创建套接字 ;

  • socket.AF_UNIX:用于同一台机器上的进程通信(既本机通信);

  • socket.AF_INET:用于服务器与服务器之间的网络通信;

  • socket.AF_INET6:基于IPV6方式的服务器与服务器之间的网络通信;

  • socket.SOCK_STREAM:基于TCP的流式socket通信;

  • socket.SOCK_DGRAM:基于UDP的数据报式socket通信;

  • socket.SOCK_RAW:原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以,其次SOCK_RAW也可以处理特殊的IPV4报文,此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头;

  • socket.SOCK_SEQPACKET:可靠的连续数据包服务;

3.如何编写服务器socket端

接下来我们讲解一下TCP服务端和TCP客户端代码示例,大家记得看代码的注释,方便大家理解代码:

# TCP服务端代码示例import socketfrom pprint import pprint# 创建TCP连接socket_instance = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# bind方法的参数是ip和端口组成的元组表示addresssocket_instance.bind(('127.0.0.1', 9000))# 操作系统可以挂起的最大连接数,如果同一时间的连接数超过5,拒绝其他的连接socket_instance.listen(5)# 死循环,循环接收新的客户端连接while True:    # 接收客户端的请求,且获取新socket对象和客户端信息    new_socket, client_addr = socket_instance.accept()  # 阻塞,等待握手    # 循环接收已连接的客户端发送的数据    while True:        # 从缓存区中读取1024字节信息 ,使用decode()方法进行解码        data = new_socket.recv(1024).decode()   # 阻塞的        # 返回客户端的一下信息        pprint(data)        # 返回客户端地址 ('127.0.0.1', 51978)        pprint(client_addr)        # 把服务器的数据发送回客户端,使用encode()方法把字符串编码成二进制        new_socket.sendall('服务器端已经拿到你的消息'.encode())
# TCP客户端代码实现import socket# 创建TCP连接socket_instance = socket.socket(socket.AF_INET, socket.SOCK_STREAM)socket_instance.connect(('127.0.0.1', 9000))   # 进行三次握手while True:    cmd = input("请输入您想说的话:")    socket_instance.send(cmd.encode())   # 把数据发送到服务端    data = socket_instance.recv(1024)      print(data.decode())

现在我们已经把TCP的服务端和客户端都写好了(写在两个不同的.py文件中),那我们来运行代码看一下效果,首先运行服务器端代码的.py文件(鼠标右键->Run test.py),然后再运行客户端代码(鼠标右键->Run test1.py),客户端会提示要我们输入想说的话,如图:
socket编程
socket编程

需要注意的是我们不能通过TCP的客户端连接UDP服务器,也不能通过UDP的客户端连接TCP的服务器,也就是客户端和服务端的socket协议必须一样

4.UDP服务器和客户端端代码实现
# UDP服务器端代码实现import socket# 创建UDP连接socket_instance = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)socket_instance.bind(('127.0.0.1', 9000))# 循环接收新的客户端连接while True:    # 接收客户端的请求,且获取新socket对象和客户端信息    data, client_addr = socket_instance.recvfrom(1024)    print(data.decode())    socket_instance.sendto('Server has receive your data'.encode(), client_addr)
# UDP客户端代码实现import socket# 创建socket实例socket_instance = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)while True:    data = input("请输入您想说的话:")    socket_instance.sendto(data.encode(), ('127.0.0.1', 9000))    data, server_addr = socket_instance.recvfrom(1024)    print(data.decode())

然后依次运行服务器端代码和客户端代码,步骤和TCP中的运行差不多

5.UDP 服务器端的实现步骤
1.创建 socket 对象;2.向socket 对象绑定服务器地址;3.进入与客户端交互数据的循环阶段;4.接收客户端发来的数据(包括 bytes 对象 data,以及客户端的 IP 地址和端口号 addr,其中 addr 为二元组 (host, port);5.打印接收信息,表示从地址为 addr 的客户端接收到数据);6.关闭;
6.UDP客户端的实现步骤
1.创建 socket 对象;2.初始化 UDP 服务器的地址;3.进入与服务器交互数据的循环阶段;4.等待用户输入数据;5.向服务器端发送接收数据;6.关闭套接字,不再向服务器发送数据;
7.TCP 和UDP的区别有哪些
  • TCP传输数据使用字节流的方式传输,而UDP是数据报传输;

  • TCP对网络条件要求高,而UDP更适合实时传输;

  • TCP编程可以保证传输的可靠性,UDP则不保证;

  • TCP会产生粘包现象,而UDP则容易丢包;

  • TCP使用listen方法和accpet方法,而UDP不需要;

  • TCP使用recv方法和send方法,而UDP使用recvfrom方法和sendto方法;

8.服务器端socket实例对象创建连接的方法有:
  • bind():将套接字绑定到地址,在AF_INET下,以tuple(host, port)的方式传入;

  • listen():开始监听TCP传入连接;

  • accept():接受TCP链接并返回(new_socket, address),其中new_socket是新的套接字对象,可以用来接收和发送数据,address是链接客户端的地址;

9.客户端socket实例对象创建连接的方法有:
  • connect():连接到address处的套接字,一般address的格式为tuple(host, port),如果链接出错,则返回socket.error错误;

  • connect_ex():功能与s.connect(address)相同,但成功返回0,失败返回errno的值;

10.客户端和服务器端socket实例对象都有的方法:
  • recv():接受TCP套接字的数据,数据以字符串形式返回;

  • send():发送TCP数据,将字符串中的数据发送到链接的套接字,返回值是要发送的字节数量,该数量可能小于string的字节大小;

  • sendall():完整发送TCP数据,将字符串中的数据发送到链接的套接字,但在返回之前尝试发送所有数据,成功返回None,失败则抛出异常;

  • recvfrom():接受UDP套接字的数据;

  • sendto():发送UDP数据,将数据发送到套接字;

  • close():关闭套接字;

  • getpeername():返回套接字的远程地址;

  • getsockname():返回套接字自己的地址;

  • settimeout():设置套接字操作的超时时间;

  • gettimeout():返回当前超时值,单位是秒,如果没有设置超时则返回None;

  • fileno():返回套接字的文件描述;

  • setblocking():如果flag为0,则将套接字设置为非阻塞模式,否则将套接字设置为阻塞模式(默认值);

  • makefile():创建一个与该套接字相关的文件;

  • setsockopt():设置给定套接字选项的值;

  • getsockopt():返回套接字选项的值;

参考:https://www.9xkd.com/user/plan-view.html?id=1374569434

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

socket编程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

socket编程

1.socket编程的概念socket通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过”套接字”向网络发出请求或者应答网络请求;socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件
2023-06-02

python3.6.5-socket编程

python3中常见异常: Exception 所有异常的基类 AttributeError 特性应用或赋值失败时引发 IOError
2023-01-31

Python-socket编程

一.socket编程Socket 是网络编程的一个抽象概念。通常我们用一个 Socket 表示“打开了一个网络链接”,而打开一个 Socket 需要知道目标计算机的 IP地址和端口号,再指定协议类型即可。二.Python的socket编程实
2023-01-31

python socket编程

socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开
2023-01-31

python网络编程-socket编程

一、服务端和客户端BS架构 (腾讯通软件:server+client)CS架构 (web网站) C/S架构与socket的关系:我们学习socket就是为了完成C/S架构的开发 二、OSI七层模型互联网协议按照功能不同分为osi七层或tcp
2023-01-31

python的socket编程

转自http://www.oschina.net/question/12_76126 参考http://www.cnblogs.com/waniu/archive/2012/08/08/2628390.html 一个简单的python so
2023-01-31

47. Python socket编程

1.获取百度返回信息import sockethost = "www.baidu.com"port = 80ip = socket.gethostname(host)#获取访问百度的时候解析出来的IP地址。(vip)print ("conn
2023-01-31

Socket 编程基础

文章目录 一、socket 简介二、socket 编程接口介绍1. socket()函数2. bind()函数3. listen()函数4. accept()函数5. connect()函数6. 发送和接收函数read()函数rec
2023-08-18

46. Python Socket编程

复习:消息队列为了防止消息丢失,或者是调用方,不需一直等待响应方的结果。# threadtest.pyimport codecsfrom queue import Queuefrom threading import Threadimpor
2023-01-31

Python—网络编程Socket

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据
2023-01-31

Python 的 Socket 编程教程

原文出处:http://www.oschina.net/question/12_76126 这是用来快速学习 Python Socket 套接字编程的指南和教程。Python 的 Socket 编程跟 C 语言很像。Python 官方关于
2023-01-31

python网络编程--socket

1.服务端1.1声明socket对象server=socket.socket(AF.INET,socket.SOCK_STREAM)1.2绑定ip、端口server.bind(localhost,6969)1.3开始监听server.lis
2023-01-31

什么是socket编程

socket编程是传输层供给应用层的编程接口,是应用层与传输层之间的桥梁,使用Socket编程可以开发客户机和服务器应用程序,可以在本地网络上进行通信,也可通过Internet在全球范围内通信。一、socket编程简介所谓socket通常也
2023-07-10

python多线程socket编程--多

Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务 端用有很多模块可以使用,如下: 1、客户端#!/usr/bin/env python#coding:utf-8'''f
2023-01-31

Java 网络编程socket编程等详解

网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。java.net包中
2023-05-31

网络编程-SOCKET开发

网络编程-SOCKET开发B/S架构       B指的是web(网页),S指的是Server(服务端软件)C/S架构       C指的是Client(客户端软件),S指的是Server(服务端软件)OSI七层模型设计的目的是成为一个所有
2023-01-31

python socket 编程之三:长

长连接:开启一个socket连接,收发完数据后,不立刻关闭连接,可以多次收发数据包。短连接:开启一个socket连接,收发完数据后,立刻关闭连接。心跳:长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态。在python里,其实不
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录