python socket网络编程

1.网络编程

客户端/服务器端架构

服务器是一个软件或硬件,用于向一个或者多个客户端提供所需的服务,服务器存在的唯一目的就是等待客户端的请求,给这些客户提供服务,然后再等待其他的请求。

2. 套接字:通信端点

套接字是一种计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必须创建套接字。就像电话的插口一样,没有它就完全没办法通信。

2.1 基于文件系统的套接字

AF_UNIX(AF_LOCAL)是一种基于文件系统的,AF表示地址家族。由于两个进程都是运行在同一台机器上的,所以这些套接字都是基于文件系统,因此他们的底层结构又文件系统来支持,同一台电脑,文件系统是不同进程都能访问的。

2.2 基于网络的套接字

AF_INET或“地址家族:Internet”,

3. 套接字类型

无论你使用哪一种地址家族,套接字的类型只有两种/:一种是面向连接的,另一种的是无连接的。

3.1 面向连接

在通信之前必须先建立连接。可以提供顺序的,可靠的,不会重复的数据传输,而且也不会被加上数据边界。
实现这种连接的主要协议就是传输控制协议TCP。要创建TCP套接字就得在创建的时候指定套接字类型SOCK_STREAM,它是流套接字。由于这些套接字使用网际协议(IP)来查找网络主机,所以就形成了TCP/IP两个协议来描述整个系统。

3.2 无连接

也即是说无需要建立连接就可以进行通讯,但这时数据到达的顺序,可靠性及不重复性就不能保证了。数据报会保留数据边界,这就表示,数据是整个发送的,不会像面向连接的协议那样被拆分。
实现这种连接的协议是用户数据报协议(UDP),要创建UDP套接字就得创建的时候指定套接字类型为SOCK_DGRAM。也就组成UDP/IP.

4. TCP

4.1 TCP服务器

# -*- coding:utf-8 -*- 
#tcp_server.py

'''
Created on 2016-1-17

@author: Stephen Huang
'''

import socket
from time import ctime


HOST=''
PROT=21567
BUFSIZE = 1024
ADDR = (HOST, PROT)

tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建服务器签字套
tcp_server_socket.bind(ADDR) # 把创建的地址绑定到套接字上
tcp_server_socket.listen(5) #监听连接,listen()表示最多允许同时连接的数量

try:
    while True:
        print 'waiting for connection ...'
        tcp_client_socket, addr = tcp_server_socket.accept()
        print '... connected from :', addr

        while True:
            data = tcp_client_socket.recv(BUFSIZE)
            if not data:
                break
            tcp_client_socket.send('[%s] %s' %(ctime(), data))
            # tcp_client_socket.close()
except Exception, e:
    print e
finally:
    tcp_server_socket.close()

4.2 TCP客户端

# -*- coding:utf-8 -*- 
# tcp_client.py

'''
Created on 2016-1-17

@author: Stephen Huang
'''
import socket

HOST='127.0.0.1'
PROT=21567
BUFSIZE = 1024
ADDR = (HOST, PROT)

tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_client_socket.connect(ADDR)

try:
    while True:
        data = raw_input('...> ')
        if not data:
            break
        tcp_client_socket.send(data)
        data = tcp_client_socket.recv(BUFSIZE)
        if not data:
            break
        print data
except Exception, e:
    print e
finally:
    tcp_client_socket.close()

4.3 测试结果

5. UDP

5.1 UDP服务器

# -*- coding:utf-8 -*- 
#udp_server.py

'''
Created on 2016-1-17

@author: Stephen Huang
'''

import socket
from time import ctime


HOST=''
PROT=21567
BUFSIZE = 1024
ADDR = (HOST, PROT)

udp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #创建服务器签字套
udp_server_socket.bind(ADDR) # 把创建的地址绑定到套接字上

try:
    while True:
        print 'waiting for message ...'
        udp_client_socket, addr = udp_server_socket.recvfrom(BUFSIZE)
        udp_server_socket.sendto('[%s] %s' %(ctime(), addr))
        print '... recevied from and returned to :', addr

except Exception, e:
    print e
finally:
    udp_server_socket.close()

5.2 UDP客户端

# -*- coding:utf-8 -*- 
# udp_client.py

'''
Created on 2016-1-17

@author: Stephen Huang
'''
import socket

HOST='127.0.0.1'
PROT=21567
BUFSIZE = 1024
ADDR = (HOST, PROT)

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

try:
    while True:
        data = raw_input('...> ')
        if not data:
            break
        udp_client_socket.sendto(data)
        data, ADDR = udp_client_socket.recvfrom(BUFSIZE)
        if not data:
            break
        print data
        udp_client_socket.close()
except Exception, e:
    print e
finally:
    udp_client_socket.close()

5.3 测试结果

6. SocketServer模块

参考

  1. http://python.usyiyi.cn/translate/python_278/library/socket.html
  2. python核心编程第16章 网络编程
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值