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

如何使用socket?

  先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

创建socket对象

socket.socket(family=AF_INET, type=SOCK_STREAM)

  family的值可以是AF_UNIX(Unix域,用于同一台机器上的进程间通讯),也可以是AF_INET(对于IPV4协议的TCP和UDP)

  type参数可以为SOCK_STREAM(流套接字)或者 SOCK_DGRAM(数据报文套接字),SOCK_RAW(raw套接字)。

Socket对象的主要属性和方法:

socket.bind(address)

  address一般情况下为一个双元素元组, ((host,port)) ,主机名或者ip地址+端口号。

socket.listen(backlog)

  socket的监听连接数,定义了最大队列,最大值依赖于主系统(一般情况下为5)

socket.accept()

  调用accept方法时,socket会进入'waiting'(或阻塞)状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有俩个元素的元组,形如(connection,address)。第一个元素(connection)是新的socket对象,服务器通过它与客户通信;第二个元素(address)是客户的internet地址。

socket.connect(address)

  连接到address定义的远程socket

socket.send(bytes[, flags])

  发送信息到远程socket

socket.recv(bufsize[, flags])

  

  服务器端通过socket获取data信息,bufsize定义了一次性接收的最大值

  

TCP

Server.py

  1. import socket
  2.  
  3. s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  4.  
  5. s.bind(("",8081))
  6. s.listen(1)
  7.  
  8. while True:
  9. connection,address = s.accept()
  10. data = connection.recv(1024)
  11. print('Received:',data)

Client.py

  1. import socket
  2. from pip.backwardcompat import raw_input
  3.  
  4. s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  5.  
  6. port = 8081
  7. host = "localhost"
  8.  
  9. s.connect((host,port))
  10.  
  11. while True:
  12. msg = raw_input()
  13. s.send(bytes(msg,'utf-8'))
  14. s.close()

UDP

server端代码

  1. import socket
  2.  
  3. s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  4.  
  5. s.bind(("",8081))
  6.  
  7. while True:
  8. data,host=s.recvfrom(1024)
  9. print('Received:',data,'from',host)

Client端代码

  1. import socket
  2. from pip.backwardcompat import raw_input
  3.  
  4. s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  5.  
  6. port = 8081
  7. host = "localhost"
  8. while True:
  9. msg = raw_input()
  10. print(msg)
  11. s.sendto(bytes(msg,encoding = "utf-8"), (host, port))

Socket模块学习的更多相关文章

  1. python——socket模块与列表映射

    从socket模块学习中的一段奇怪代码说起 前言:在学习python标准库中的Socket模块中,发现了一段奇怪的代码. import socket def get_constants(prefix) ...

  2. python学习记录-socket模块

    主要使用的模块是socket模块,在这个模块中可以找到socket()函数,该函数用于创建套接字对象.套接字也有自己的方法集,这些方法可以实现基于套接字的网络通信. 1.socket类型 构造函数: ...

  3. Python套接字编程(1)——socket模块与套接字编程

    在Python网络编程系列,我们主要学习以下内容: 1. socket模块与基本套接字编程 2. socket模块的其他网络编程功能 3. SocketServer模块与简单并发服务器 4. 异步编程 ...

  4. day28 网络协议OSI 及socket模块

    反射都是操作对象中的__dict__的内容 class Student: def study(self): print("正在学习....") stu = Student() if ...

  5. python基础===socket模块的讲解(转)

    一.网络知识的一些介绍 socket 是网络连接端点.例如当你的Web浏览器请求www.jb51.net上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.jb51.net的Web ...

  6. python paramiko模块学习分享

    python paramiko模块学习分享 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Sola ...

  7. socket编程--socket模块介绍

    socket也称作'套接字,用于描述IP地址和端口,是一个通信的终点. socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",对于文件用[打开][读写] ...

  8. Python中的socket 模块

    Python 提供了两个基本的 socket 模块.第一个是 Socket,它提供了标准的 BSD Sockets API.第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务 ...

  9. Python网络编程(2)——socket模块(2)

    目录: 1. 异常 2. 地址族 3. 套接字类型 4. 模块方法 5. Socket对象与实例方法 socket模块提供了Python中的低层网络连接接口,用于操作套接字操作. 异常 socket模 ...

随机推荐

  1. AC自动机小结

    专题链接 第一题--hdu2222 Keywords Search ac自动机的模板题,入门题.  题解 第二题--hdu2896 病毒侵袭   一类病毒的入门题,类似模板  题解 第三题--hdu3 ...

  2. asp.net 获取汉字字符串的拼音首字母,含多音字

    需求:在很多时候数据查询的时候,我们希望输入某个人姓名的拼音首字母进行查询,例如“潘长江”,输入“pcj”,就能搜索潘长江相关信息. 实现: #region 获取汉字转换拼音 首字母 public s ...

  3. <mvc:annotation-driven/>与<context:annotation-config/>的区别

    在使用注解的方式配置SSM的时候一般会配置<mvc:annotation-driven/>与<context:annotation-config/>,有时候会对两者的概念有些区 ...

  4. ubuntu16.04中将python3设置为默认

    直接执行这两个命令即可: sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo upd ...

  5. ajax向后台传递数组

    $.ajax({ traditional: true//这个设置为true,data:{"steps":["qwe","asd"," ...

  6. Unity3D 之 iTween 相关

    有过 Flash 开发经验的朋友,对这个 iTween 应该感到非常熟悉吧,在 Flash 平台有一款功能几乎一样的插件 TweenLite,至于哪个先哪个后,有没有相互借鉴之类的就不在讨论范围了. ...

  7. Sql Server如何新建计划任务

    打开Sql Server数据库,在管理中找到维护计划功能,右击维护计划选择维护计划向导.如图所示: 打开维护计划向导后,在第一个步骤下输入计划名称. 输入完计划名称后,点击右下角的更改按钮,这里是配置 ...

  8. 深入浅出Mybatis系列(九)---强大的动态SQL

    上篇文章<深入浅出Mybatis系列(八)---mapper映射文件配置之select.resultMap>简单介绍了mybatis的查询,至此,CRUD都已讲完.本文将介绍mybatis ...

  9. sq楼盘信息

    Sq楼盘信息 1.1按关注度来分 前10个 序号 楼盘 网址 价格 关注人数 地址 附件社区 1 上海公馆 http://shangqiu.jiwu.com/loupan/236459.html 38 ...

  10. sed 使用

    Sed简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内 ...