day7-socket

一、概述

socket,也称作套接字,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。

socket是unix 打开-读写-关闭 模式的一种实现,可看做特殊的“文件”

二、关系图

三、概念

Socket Families(地址簇)

socket.AF_UNIX:unix本机进程间通信
socket.AF_INET:IPV4 
socket.AF_INET6:IPV6

Socket Types

socket.SOCK_STREAM:tcp
socket.SOCK_DGRAM:udp
socket.SOCK_RAW:原始套接字,可以处理普通套接字无法处理的ICMP、IGMP等网络报文和特殊的IPv4报文,还可以可以通过IP_HDRINCL套接字选项由用户构造IP头。
socket.SOCK_RDM :可靠的UDP形式,即保证交付数据报但不保证顺序。提供对原始协议的低级访问,如发送ICMP报文这种特殊操作,通常仅限于高级用户或管理员运行的程序使用。
socket.SOCK_SEQPACKET:废弃

四、实例

服务端:

 1 #coding:utf-8
 2 import socket
 3 import os
 4 
 5 # 创建服务端实例
 6 sever = socket.socket()
 7 # 绑定ip和端口
 8 sever.bind(("localhost", 2222))
 9 # 监听端口,设置最大等待数为5个
10 sever.listen(5)
11 print("等电话....")
12 
13 while True:
14     # 有客户端连接,返回连接实例和客户端地址
15     conn, addr = sever.accept()
16     # print(conn, addr)
17     print("我的电话来了")
18     count = 0
19     while True:
20         # 接收数据
21         data = conn.recv(1024)
22         # 如果数据为空,重新接收
23         if not data:
24             break
25         print("client data:", data.decode('utf-8'))
26         # 发回数据
27         # python2字符串和字节均可发送,python3只可发送字节
28         res = data.upper()
29         # 执行命令
30         # res = os.popen(data).read()
31         conn.send()
32         # 发送需要下载的文件
33         # with open("test", "rb") as test_file:
34         #    res = test_file.read()
35         # conn.sendall(res)
36         count += 1
37 # 关闭服务端
38 sever.close()

客户端:

 1 #coding:utf-8
 2 
 3 # 客户端
 4 import socket
 5 
 6 # 创建socket实例
 7 client = socket.socket()
 8 # 建立连接
 9 client.connect(('localhost', 2222))
10 while True:
11     # send_data = 'hello world'
12     send_data = raw_input('>>>:')
13     if not send_data:
14         continue
15     send_data = send_data.encode('utf-8')
16     # 发送数据
17     # python2字符串和字节均可发送,python3只可发送字节
18     client.send(send_data)
19     # 接收服务端数据,这里设置接收1024字节
20     data = client.recv(1024)
21     res = data.decode('utf-8')
22     print("server rece:", res)
23     # 读取数据,生成文件用于下载
24     # with open("test_put", "wb") as test_put_file:
25     #        test_put_file.write(data)
26 # 关闭连接
27 client.close()

 

posted @ 2017-07-07 18:47  不知所以  阅读(97)  评论(0)    收藏  举报