Python 网络编程/(有连接)

1.0 重要概念:

客户/服务器构架:服务器是一个软件或硬件,提供客户需要的服务。服务器存在的唯一目的就是等待客户请求,给客户服务。服务完成后等待其它请求。硬件服务器,如打印机,它不断等待打印的请求。软件服务器,例如Web服务器,提供数据和网页。

套接字 = 通讯端点:所谓套接字就是指“通讯端点”概念的计算机网络数据结构。在进行通讯前必须创建套接字,就像电话的插口一样。

Internet网络地址:网络地址由主机和端口组成。主机为用户名,例如在WIN系统下为Administrator,Linux下为sophie。端口的合法范围为0至65535。小于1024为系统保留端口。

2.0 总体思路:

服务器

  1. 创建通讯端点
  2. 进入监听的无限循环
  3. (通知潜在客户,服务器已经运行了)
  4. 建立与客户的连接
  5. 与客户进行数据交互
  6. 通讯结束
  7. 进入监听的无限循环

客户:

  1. 创建通讯端点
  2. 建立链接
  3. 进行数据交换
  4. 切断链接

3.0 Python实现(通过 socket 模块):

服务器端口

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 10 18:43:58 2017
@author: angelfish
"""

import socket as sk    # 加载套接字模块
from time import ctime

HOST = ''    #允许任何客户进来,所以这个为空
PORT = 21567    #设置通信端口为21567
BUFSIZ = 1024    #设置通信缓存为1kB
ADDR = (HOST,PORT)    #设置通信地址

tcpSerSock = sk.socket(sk.AF_INET, sk.SOCK_STREAM)    #创建一个通信端口的类实例
tcpSerSock.bind(ADDR)     #在通讯端口绑定地址
tcpSerSock.listen(5)     #指定内核应该为相应套接字排队的最大连接数

while 1:    #进入监听循环
    print 'waiting for connection...'
    tcpCliSock, addr = tcpSerSock.accept()
    print 'conneted from:',addr

    while 1:     #连接上之后进入交互数据循环
        data = tcpCliSock.recv(BUFSIZ)
        if not data:
            break
        tcpCliSock.send('[%s] %s' %(ctime(),data))   #返回带有时间戳的数据

tcpCliSock.close()
tcpSerSock.close()

客户端口

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 10 18:55:43 2017
@author: angelfish
"""

import socket as sk

HOST = 'angelfish'  #我用的Linux下的用户名为angelfish
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST,PORT)

tcpCliSock = sk.socket(sk.AF_INET, sk.SOCK_STREAM)
tcpCliSock.connect(ADDR)
while 1:
    data = raw_input('>>')
    if not data:
        break
    tcpCliSock.send(data)
    data = tcpCliSock.recv(BUFSIZ)
    if not data:
        break
    print data

tcpCliSock.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值