PYthon -网络编程—TCP编程
2017-04-25 00:47
387 查看
概念:
创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。
服务器端编程如下:
第一步:创建一个socket对象
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
上面的代码创建了一个socket对象。type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。AF_INET表示创建的是ip v4的类型。
socket(address_family,type,protocol_type)上面三个参数的含义是:address_family指明要建立哪一类socket。最常用的当然是ip协议,AF_INET。在unix系统中,AF_UNIX也是比较常用的,用于建立unix系统中的进程间通信。type用于指定通信类型。通常是建立面向连接的流通信。SOCKET_DGRAM是报文通信。如果address_family设置的是AF_INET,那么对应的是TCP和UDP。protocol_type用于指定协议类型。这个参数是可选的。在建立tcp或者是udp连接的时候他们通常都是0。如果第一个参数是AF_INET,那么这个参数表示是ip包中的protocol字段。
第二步:是将socket绑定到指定的地址:例:sock.bind(('localhost',7556)) # 两个参数 :地址、端口 第三步:监听端口: :【listen方法中的参数指明可接受的最大连接数】
sock.listen(5)
第四步:不断接收请求:收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求.
connection,address = sock.accept()
accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。
第五步:是处理阶段,服务器和客户端通过send和recv方法通信(传输数据)。如果send成功了,那么对方的缓冲区已经有你发送的数据了。 #调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。
例子: 取自:python TCP编程:——廖雪峰:例:
TCP服务器端连接:
# -*- coding:utf-8 -*- ' a socket example which send echo message to client.' import socket, threading import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 监听端口: s.bind(('127.0.0.1', 9999)) # 127.0.0.1是一个特殊的IP地址,表示本机地址,如果绑定到这个地址,客户端必须同时在本机运行才能连接,也就是说,外部的计算机无法连接进来。 s.listen(5) print 'Waiting for connection...' def tcplink(sock, addr): print 'Accept new connection from %s:%s...' % addr sock.send('Welcome,Godwj') while True: data = sock.recv(1024) time.sleep(1) if data == 'exit' or not data: break sock.send('Hello, %s!' % data) sock.close() print 'Connection from %s:%s close.' % addr while True: # 接受一个新连接: sock, addr = s.accept() #accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素sock 是新的socket对象,服务器必须通过它与客户通信;第二个元素 addr是客户的Internet地址 # 创建新线程来处理TCP连接: t = threading.Thread(target = tcplink, args =(sock, addr)) t.start()
客户端编程如下:
第一步:
第一步:创建一个socket对象
第二步:建立连接TCP客户端-例子:
# -*- coding:utf-8 -*- 'a socket example which send echo message to server' import socket # 创建socket对象: a = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 建立连接: a.connect(('127.0.0.1', 9999)) # 接收欢迎消息: print a.recv(1024) for data in ['Michael', 'Tracy', 'Green']: # 发送数据: a.send(data) print a.recv(1024) a.send('exit') a.close()
(ps: 以上内容仅为学习参考使用)
相关文章推荐
- python 网络编程学习: 1 初识 SOCKET
- Python 网络编程相关知识学习
- 【python】网络编程-TCP协议套接字
- python 网络编程 openurl [errno 10060]
- Python案例-网络编程-进程池
- 【循序渐进学Python】15.网络编程
- python网络编程之网络主机信息
- python 网络编程 udp示例
- Python简单网络编程示例【客户端与服务端】
- python进阶九_网络编程
- python 网络编程基础
- python(12-4 网络编程 ---HTTP协议 报文收发结构 )
- Python网络编程测试-DNS
- Python socket网络编程
- Python Socket 网络编程 (服务器端编程)
- Python 网络编程测试-Parser初探
- 18-Python网络编程
- 12、Python-网络编程
- python 网络编程基础 笔记
- Python学习第二十一天——线程进程续和网络编程