Socket模块学习

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

如何使用socket?设计模式

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

建立socket对象socket

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

  family的值能够是AF_UNIX(Unix域,用于同一台机器上的进程间通信),也能够是AF_INET(对于IPV4协议的TCP和UDP)设计

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

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

socket.bind(address)blog

  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

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.bind(("",8081))
s.listen(1)

while True: 
    connection,address = s.accept()
    data = connection.recv(1024)
    print('Received:',data)

 Client.py

import socket
from pip.backwardcompat import raw_input

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

port = 8081
host = "localhost"

s.connect((host,port))

while True:
    msg = raw_input()
    s.send(bytes(msg,'utf-8'))
    s.close()

 

 

UDP

server端代码

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

s.bind(("",8081))

while True: 
    data,host=s.recvfrom(1024)
    print('Received:',data,'from',host)

 Client端代码

import socket
from pip.backwardcompat import raw_input

s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

port = 8081
host = "localhost"
while True:
    msg = raw_input()
    print(msg)
    s.sendto(bytes(msg,encoding = "utf-8"), (host, port))
相关文章
相关标签/搜索