python 网络编程

一 网络基础

  互联网协议按照功能不同分为osi七层或者ip/tcp五层,ip/tcp四层。

  数据链路层:有个以太网协议,ethernet,一组电信号称为一个数据报,也叫帧。ethernet规定接入internet的计算机都必须有网卡,发送端和接收端的地址就是网卡地址,也就是MAC地址。

  网路层:规定网络地址的协议叫做ip协议,它定义的地址叫做ip地址。

  传输层:tcp/udp协议。

  

二 socket

  socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。

  实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。

   1 套接字的两个种族  

    1 AF_UNIX,基于文件类型。很少用

    2 AF_INET,基于网络类型。  AF,代表 Address Family,地址族。

  

  Server端

import socket
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind(('127.0.0.1',8080))      #绑定
server.listen(5)                     #监听
while True:                          #连接循环
    conn,ip_port=server.accept()     #创建client与server端的连接
    print('conn',conn)
    print('ip_port',ip_port)
    while True:                    #通信循环
        try:                       #异常处理,client端突然断开
            date=conn.recv(1024)   #接收
            
       if not date:break #这行代码是针对linux,在linu中如果client突然断开,conn.recv由阻塞状态变为不阻塞状态,一直接收 空。
       print(date) conn.send(date.upper()) #发送 except Exception: break conn.close() server.close()

 

 

  Client端

import socket
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client.connect(('127.0.0.1',8080))
while True:                                     #通信循环
    cmd=input('==>')
    if not cmd:continue                         #判定不能为空,为空,实际上client端没有被操作系统发出数据,空 操作系统就不会发出。
    client.send(bytes(cmd,encoding='utf-8'))
    date=client.recv(1024)
    print(date.decode('utf-8'))

 

posted @ 2017-09-25 17:32  骑者赶路  阅读(127)  评论(0编辑  收藏  举报